diff --git a/docs/fr/changelog/2017.md b/docs/fr/changelog/2017.md new file mode 100644 index 00000000000..8cb6e3ef2e0 --- /dev/null +++ b/docs/fr/changelog/2017.md @@ -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 `. +- 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' section dans config.xml, ensemble ``` ``107374182400 ``` 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 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é. diff --git a/docs/fr/changelog/2018.md b/docs/fr/changelog/2018.md new file mode 100644 index 00000000000..cae840dfc34 --- /dev/null +++ b/docs/fr/changelog/2018.md @@ -0,0 +1,1060 @@ +--- +machine_translated: true +--- + +## Clickhouse version 18.16 {#clickhouse-release-18-16} + +### Clickhouse version 18.16.1, 2018-12-21 {#clickhouse-release-18-16-1-2018-12-21} + +#### Corrections de bugs: {#bug-fixes} + +- Correction d'une erreur qui a conduit à des problèmes avec la mise à jour des dictionnaires avec la source ODBC. [\#3825](https://github.com/ClickHouse/ClickHouse/issues/3825), [\#3829](https://github.com/ClickHouse/ClickHouse/issues/3829) +- La compilation JIT des fonctions d'agrégat fonctionne maintenant avec des colonnes LowCardinality. [\#3838](https://github.com/ClickHouse/ClickHouse/issues/3838) + +#### Amélioration: {#improvements} + +- Ajouté le `low_cardinality_allow_in_native_format` paramètre enabled (activé, option par défaut). Lorsqu'elles sont désactivées, les colonnes LowCardinality seront converties en colonnes ordinaires pour les requêtes SELECT et les colonnes ordinaires seront attendues pour les requêtes INSERT. [\#3879](https://github.com/ClickHouse/ClickHouse/pull/3879) + +#### Construire des améliorations: {#build-improvements} + +- Corrections pour les builds sur macOS et ARM. + +### Clickhouse version 18.16.0, 2018-12-14 {#clickhouse-release-18-16-0-2018-12-14} + +#### Nouveauté: {#new-features} + +- `DEFAULT` les expressions sont évaluées pour les champs manquants lors du chargement de données dans des formats d'entrée semi-structurés (`JSONEachRow`, `TSKV`). La fonction est activée avec le `insert_sample_with_metadata` paramètre. [\#3555](https://github.com/ClickHouse/ClickHouse/pull/3555) +- Le `ALTER TABLE` la requête a maintenant la `MODIFY ORDER BY` action pour changer la clé de tri lors de l'ajout ou de la suppression d'une colonne de table. Ceci est utile pour les tables dans la `MergeTree` famille qui effectuent des tâches supplémentaires lors de la fusion en fonction de cette clé de tri, telles que `SummingMergeTree`, `AggregatingMergeTree` et ainsi de suite. [\#3581](https://github.com/ClickHouse/ClickHouse/pull/3581) [\#3755](https://github.com/ClickHouse/ClickHouse/pull/3755) +- Pour les tableaux dans le `MergeTree` famille, maintenant vous pouvez spécifier une clé de tri différente (`ORDER BY`) et de l'indice de (`PRIMARY KEY`). La clé de tri peut être plus longue que l'index. [\#3581](https://github.com/ClickHouse/ClickHouse/pull/3581) +- Ajouté le `hdfs` fonction de table et le `HDFS` moteur de table pour l'importation et l'exportation de données vers HDFS. [chenxing-xc](https://github.com/ClickHouse/ClickHouse/pull/3617) +- Ajout de fonctions pour travailler avec base64: `base64Encode`, `base64Decode`, `tryBase64Decode`. [Alexander Krasheninnikov](https://github.com/ClickHouse/ClickHouse/pull/3350) +- Vous pouvez maintenant utiliser un paramètre pour configurer la précision du `uniqCombined` fonction d'agrégation (sélectionnez le nombre de cellules HyperLogLog). [\#3406](https://github.com/ClickHouse/ClickHouse/pull/3406) +- Ajouté le `system.contributors` table qui contient les noms de tous ceux qui ont fait des commits dans ClickHouse. [\#3452](https://github.com/ClickHouse/ClickHouse/pull/3452) +- Ajout de la possibilité d'omettre la partition de l' `ALTER TABLE ... FREEZE` requête en vue de sauvegarder toutes les partitions à la fois. [\#3514](https://github.com/ClickHouse/ClickHouse/pull/3514) +- Ajouter `dictGet` et `dictGetOrDefault` fonctions qui ne nécessitent pas de spécifier le type de valeur de retour. Le type est déterminé automatiquement à partir de la description du dictionnaire. [Amos Oiseau](https://github.com/ClickHouse/ClickHouse/pull/3564) +- Vous pouvez maintenant spécifier des commentaires pour une colonne dans la description de la table et la modifier en utilisant `ALTER`. [\#3377](https://github.com/ClickHouse/ClickHouse/pull/3377) +- La lecture est prise en charge pour `Join` tapez des tables avec des touches simples. [Amos Oiseau](https://github.com/ClickHouse/ClickHouse/pull/3728) +- Vous pouvez maintenant spécifier les options `join_use_nulls`, `max_rows_in_join`, `max_bytes_in_join`, et `join_overflow_mode` lors de la création d'un `Join` type de table. [Amos Oiseau](https://github.com/ClickHouse/ClickHouse/pull/3728) +- Ajouté le `joinGet` fonction qui permet d'utiliser un `Join` tapez table comme un dictionnaire. [Amos Oiseau](https://github.com/ClickHouse/ClickHouse/pull/3728) +- Ajouté le `partition_key`, `sorting_key`, `primary_key`, et `sampling_key` les colonnes de la `system.tables` table afin de fournir des informations sur les clés de table. [\#3609](https://github.com/ClickHouse/ClickHouse/pull/3609) +- Ajouté le `is_in_partition_key`, `is_in_sorting_key`, `is_in_primary_key`, et `is_in_sampling_key` les colonnes de la `system.columns` table. [\#3609](https://github.com/ClickHouse/ClickHouse/pull/3609) +- Ajouté le `min_time` et `max_time` les colonnes de la `system.parts` table. Ces colonnes sont remplies lorsque la clé de partitionnement est une expression composée de `DateTime` colonne. [Emmanuel Donin de Rosière](https://github.com/ClickHouse/ClickHouse/pull/3800) + +#### Corrections de bugs: {#bug-fixes-1} + +- Corrections et améliorations des performances pour `LowCardinality` type de données. `GROUP BY` utiliser `LowCardinality(Nullable(...))`. Obtenir les valeurs de `extremes`. Traitement des fonctions d'ordre Élevé. `LEFT ARRAY JOIN`. Distribué `GROUP BY`. Fonctions qui renvoient `Array`. L'exécution de `ORDER BY`. Écrit à `Distributed` tableaux (nicelulu). Rétrocompatibilité pour `INSERT` requêtes provenant d'anciens clients qui implémentent `Native` protocole. Soutien pour `LowCardinality` pour `JOIN`. Amélioration des performances lorsque vous travaillez dans un flux unique. [\#3823](https://github.com/ClickHouse/ClickHouse/pull/3823) [\#3803](https://github.com/ClickHouse/ClickHouse/pull/3803) [\#3799](https://github.com/ClickHouse/ClickHouse/pull/3799) [\#3769](https://github.com/ClickHouse/ClickHouse/pull/3769) [\#3744](https://github.com/ClickHouse/ClickHouse/pull/3744) [\#3681](https://github.com/ClickHouse/ClickHouse/pull/3681) [\#3651](https://github.com/ClickHouse/ClickHouse/pull/3651) [\#3649](https://github.com/ClickHouse/ClickHouse/pull/3649) [\#3641](https://github.com/ClickHouse/ClickHouse/pull/3641) [\#3632](https://github.com/ClickHouse/ClickHouse/pull/3632) [\#3568](https://github.com/ClickHouse/ClickHouse/pull/3568) [\#3523](https://github.com/ClickHouse/ClickHouse/pull/3523) [\#3518](https://github.com/ClickHouse/ClickHouse/pull/3518) +- Correction de la façon dont le `select_sequential_consistency` l'option fonctionne. Auparavant, lorsque ce paramètre était activé, un résultat incomplet était parfois renvoyé après avoir commencé à écrire sur une nouvelle partition. [\#2863](https://github.com/ClickHouse/ClickHouse/pull/2863) +- Les bases de données sont correctement spécifiées lors de L'exécution de DDL `ON CLUSTER` les requêtes et `ALTER UPDATE/DELETE`. [\#3772](https://github.com/ClickHouse/ClickHouse/pull/3772) [\#3460](https://github.com/ClickHouse/ClickHouse/pull/3460) +- Les bases de données sont correctement spécifiées pour les sous-requêtes à l'intérieur d'une vue. [\#3521](https://github.com/ClickHouse/ClickHouse/pull/3521) +- Correction d'un bug dans `PREWHERE` avec `FINAL` pour `VersionedCollapsingMergeTree`. [7167bfd7](https://github.com/ClickHouse/ClickHouse/commit/7167bfd7b365538f7a91c4307ad77e552ab4e8c1) +- Maintenant, vous pouvez utiliser `KILL QUERY` pour annuler les requêtes qui n'ont pas encore démarré car elles attendent que la table soit verrouillée. [\#3517](https://github.com/ClickHouse/ClickHouse/pull/3517) +- Correction des calculs de date et d'heure si les horloges ont été déplacées à minuit (cela se produit en Iran, et est arrivé à Moscou de 1981 à 1983). Auparavant, cela a conduit à la réinitialisation de l'heure un jour plus tôt que nécessaire, et a également provoqué un formatage incorrect de la date et de l'heure au format texte. [\#3819](https://github.com/ClickHouse/ClickHouse/pull/3819) +- Correction de bugs dans certains cas, de `VIEW` et les sous-requêtes qui omettent la base de données. [L'Hiver Zhang](https://github.com/ClickHouse/ClickHouse/pull/3521) +- Correction d'une condition de course lors de la lecture simultanée d'un `MATERIALIZED VIEW` et la suppression d'un `MATERIALIZED VIEW` en raison de ne pas verrouiller l'interne `MATERIALIZED VIEW`. [\#3404](https://github.com/ClickHouse/ClickHouse/pull/3404) [\#3694](https://github.com/ClickHouse/ClickHouse/pull/3694) +- Correction de l'erreur `Lock handler cannot be nullptr.` [\#3689](https://github.com/ClickHouse/ClickHouse/pull/3689) +- Correction du traitement des requêtes lorsque le `compile_expressions` option est activée (elle est activée par défaut). Expressions constantes non déterministes comme le `now` fonction ne sont plus déplié. [\#3457](https://github.com/ClickHouse/ClickHouse/pull/3457) +- Correction d'un plantage lors de la spécification d'un argument d'échelle non constant dans `toDecimal32/64/128` fonction. +- Correction d'une erreur lors de l'insertion d'un tableau avec `NULL` éléments dans le `Values` formater dans une colonne de type `Array` sans `Nullable` (si `input_format_values_interpret_expressions` = 1). [\#3487](https://github.com/ClickHouse/ClickHouse/pull/3487) [\#3503](https://github.com/ClickHouse/ClickHouse/pull/3503) +- Fixe continue de journalisation des erreurs dans `DDLWorker` si la Gardienne n'est pas disponible. [8f50c620](https://github.com/ClickHouse/ClickHouse/commit/8f50c620334988b28018213ec0092fe6423847e2) +- Correction du type de retour pour `quantile*` les fonctions de `Date` et `DateTime` les types d'arguments. [\#3580](https://github.com/ClickHouse/ClickHouse/pull/3580) +- Correction de l' `WITH` clause si elle spécifie un alias simple sans expressions. [\#3570](https://github.com/ClickHouse/ClickHouse/pull/3570) +- Correction du traitement des requêtes avec des sous-requêtes nommées et des noms de colonnes qualifiés lorsque `enable_optimize_predicate_expression` est activé. [L'Hiver Zhang](https://github.com/ClickHouse/ClickHouse/pull/3588) +- Correction de l'erreur `Attempt to attach to nullptr thread group` lorsque vous travaillez avec des vues matérialisées. [Marek Vavruša](https://github.com/ClickHouse/ClickHouse/pull/3623) +- Correction d'un plantage lors du passage de certains arguments incorrects `arrayReverse` fonction. [73e3a7b6](https://github.com/ClickHouse/ClickHouse/commit/73e3a7b662161d6005e7727d8a711b930386b871) +- Correction du débordement de tampon dans le `extractURLParameter` fonction. Amélioration de la performance. Ajout d'un traitement correct des chaînes contenant zéro octet. [141e9799](https://github.com/ClickHouse/ClickHouse/commit/141e9799e49201d84ea8e951d1bed4fb6d3dacb5) +- Dépassement de tampon fixe dans le `lowerUTF8` et `upperUTF8` fonction. Retiré la possibilité d'exécuter ces fonctions sur `FixedString` tapez les arguments. [\#3662](https://github.com/ClickHouse/ClickHouse/pull/3662) +- Correction d'une condition de course rare lors de la suppression `MergeTree` table. [\#3680](https://github.com/ClickHouse/ClickHouse/pull/3680) +- Correction d'une condition de course lors de la lecture de `Buffer` tables et effectuer simultanément `ALTER` ou `DROP` sur les tables cibles. [\#3719](https://github.com/ClickHouse/ClickHouse/pull/3719) +- Correction d'un segfault si le `max_temporary_non_const_columns` limite a été dépassée. [\#3788](https://github.com/ClickHouse/ClickHouse/pull/3788) + +#### Amélioration: {#improvements-1} + +- Le serveur n'écrit pas les fichiers de configuration traités `/etc/clickhouse-server/` répertoire. Au lieu de cela, il les enregistre dans la `preprocessed_configs` répertoire à l'intérieur `path`. Cela signifie que l' `/etc/clickhouse-server/` répertoire n'ont pas d'accès en écriture pour le `clickhouse` de l'utilisateur, ce qui améliore la sécurité. [\#2443](https://github.com/ClickHouse/ClickHouse/pull/2443) +- Le `min_merge_bytes_to_use_direct_io` l'option est définie sur 10 GiB par défaut. Une fusion qui forme de grandes parties de tables de la famille MergeTree sera effectuée dans `O_DIRECT` mode, qui empêche l'expulsion excessive du cache de page. [\#3504](https://github.com/ClickHouse/ClickHouse/pull/3504) +- Démarrage accéléré du serveur lorsqu'il y a un très grand nombre de tables. [\#3398](https://github.com/ClickHouse/ClickHouse/pull/3398) +- Ajout d'un pool de connexion et HTTP `Keep-Alive` pour les connexions entre les répliques. [\#3594](https://github.com/ClickHouse/ClickHouse/pull/3594) +- Si la syntaxe de la requête n'est pas `400 Bad Request` le code est renvoyé dans la `HTTP` interface (500 a été retourné précédemment). [31bc680a](https://github.com/ClickHouse/ClickHouse/commit/31bc680ac5f4bb1d0360a8ba4696fa84bb47d6ab) +- Le `join_default_strictness` l'option est définie sur `ALL` par défaut, pour la compatibilité. [120e2cbe](https://github.com/ClickHouse/ClickHouse/commit/120e2cbe2ff4fbad626c28042d9b28781c805afe) +- Suppression de la journalisation vers `stderr` à partir de la `re2` bibliothèque pour les expressions régulières non valides ou complexes. [\#3723](https://github.com/ClickHouse/ClickHouse/pull/3723) +- Ajouté pour la `Kafka` moteur de table: vérifie les abonnements avant de commencer à lire à partir de Kafka; le paramètre kafka\_max\_block\_size pour la table. [Marek Vavruša](https://github.com/ClickHouse/ClickHouse/pull/3396) +- Le `cityHash64`, `farmHash64`, `metroHash64`, `sipHash64`, `halfMD5`, `murmurHash2_32`, `murmurHash2_64`, `murmurHash3_32`, et `murmurHash3_64` fonctions maintenant travailler pour n'importe quel nombre d'arguments et des arguments sous la forme de tuples. [\#3451](https://github.com/ClickHouse/ClickHouse/pull/3451) [\#3519](https://github.com/ClickHouse/ClickHouse/pull/3519) +- Le `arrayReverse` fonction fonctionne maintenant avec tous les types de tableaux. [73e3a7b6](https://github.com/ClickHouse/ClickHouse/commit/73e3a7b662161d6005e7727d8a711b930386b871) +- Ajout d'un paramètre optionnel: la taille de l'emplacement pour le `timeSlots` fonction. [Kirill Shvakov](https://github.com/ClickHouse/ClickHouse/pull/3724) +- Pour `FULL` et `RIGHT JOIN`, le `max_block_size` le paramètre est utilisé pour un flux de données non jointes à partir de la table de droite. [Amos Oiseau](https://github.com/ClickHouse/ClickHouse/pull/3699) +- Ajouté le `--secure` paramètre de ligne de commande dans `clickhouse-benchmark` et `clickhouse-performance-test` pour activer TLS. [\#3688](https://github.com/ClickHouse/ClickHouse/pull/3688) [\#3690](https://github.com/ClickHouse/ClickHouse/pull/3690) +- Conversion de Type lorsque la structure d'un `Buffer` type table ne correspond pas à la structure de la table de destination. [Vitaly Baranov](https://github.com/ClickHouse/ClickHouse/pull/3603) +- Ajouté le `tcp_keep_alive_timeout` option pour activer les paquets persistant après une inactivité de l'intervalle de temps spécifié. [\#3441](https://github.com/ClickHouse/ClickHouse/pull/3441) +- Suppression des guillemets inutiles de valeurs pour la clé de partition dans le `system.parts` le tableau si il se compose d'une seule colonne. [\#3652](https://github.com/ClickHouse/ClickHouse/pull/3652) +- La fonction modulo fonctionne pour `Date` et `DateTime` types de données. [\#3385](https://github.com/ClickHouse/ClickHouse/pull/3385) +- Ajouté synonymes pour le `POWER`, `LN`, `LCASE`, `UCASE`, `REPLACE`, `LOCATE`, `SUBSTR`, et `MID` fonction. [\#3774](https://github.com/ClickHouse/ClickHouse/pull/3774) [\#3763](https://github.com/ClickHouse/ClickHouse/pull/3763) Certains noms de fonctions sont insensibles à la casse pour la compatibilité avec le standard SQL. Sucre syntaxique ajouté `SUBSTRING(expr FROM start FOR length)` pour la compatibilité avec SQL. [\#3804](https://github.com/ClickHouse/ClickHouse/pull/3804) +- Ajout de la possibilité de `mlock` pages mémoire correspondant à `clickhouse-server` code exécutable pour l'empêcher d'être forcé hors de la mémoire. Cette fonctionnalité est désactivée par défaut. [\#3553](https://github.com/ClickHouse/ClickHouse/pull/3553) +- Amélioration des performances lors de la lecture de `O_DIRECT` (avec l' `min_bytes_to_use_direct_io` option activée). [\#3405](https://github.com/ClickHouse/ClickHouse/pull/3405) +- Amélioration de la performance de l' `dictGet...OrDefault` fonction pour un argument clé constant et un argument par défaut non constant. [Amos Oiseau](https://github.com/ClickHouse/ClickHouse/pull/3563) +- Le `firstSignificantSubdomain` la fonction traite maintenant les domaines `gov`, `mil`, et `edu`. [Igor Hatarist](https://github.com/ClickHouse/ClickHouse/pull/3601) Amélioration de la performance. [\#3628](https://github.com/ClickHouse/ClickHouse/pull/3628) +- Possibilité de spécifier des variables d'environnement personnalisées pour le démarrage `clickhouse-server` à l'aide de la `SYS-V init.d` script en définissant `CLICKHOUSE_PROGRAM_ENV` dans `/etc/default/clickhouse`. + [Pavlo Bashynskyi](https://github.com/ClickHouse/ClickHouse/pull/3612) +- Code de retour Correct pour le script d'initialisation clickhouse-server. [\#3516](https://github.com/ClickHouse/ClickHouse/pull/3516) +- Le `system.metrics` la table a maintenant le `VersionInteger` métrique, et `system.build_options` a la ligne ajoutée `VERSION_INTEGER`, qui contient la forme numérique de la version ClickHouse, telle que `18016000`. [\#3644](https://github.com/ClickHouse/ClickHouse/pull/3644) +- Retiré la possibilité de comparer la `Date` tapez avec un nombre pour éviter les erreurs potentielles comme `date = 2018-12-17`, où les citations autour de la date sont omises par erreur. [\#3687](https://github.com/ClickHouse/ClickHouse/pull/3687) +- Correction du comportement des fonctions avec État comme `rowNumberInAllBlocks`. Ils ont précédemment sorti un résultat qui était un nombre plus grand en raison du démarrage lors de l'analyse de la requête. [Amos Oiseau](https://github.com/ClickHouse/ClickHouse/pull/3729) +- Si l' `force_restore_data` le fichier ne peut pas être supprimé, un message d'erreur est affiché. [Amos Oiseau](https://github.com/ClickHouse/ClickHouse/pull/3794) + +#### Construire des améliorations: {#build-improvements-1} + +- Mise à jour le `jemalloc` bibliothèque, qui corrige une fuite de mémoire potentielle. [Amos Oiseau](https://github.com/ClickHouse/ClickHouse/pull/3557) +- Profilage avec `jemalloc` est activé par défaut pour les versions de débogage. [2cc82f5c](https://github.com/ClickHouse/ClickHouse/commit/2cc82f5cbe266421cd4c1165286c2c47e5ffcb15) +- Ajout de la possibilité d'exécuter des tests d'intégration lorsque `Docker` est installé sur le système. [\#3650](https://github.com/ClickHouse/ClickHouse/pull/3650) +- Ajout du test d'expression fuzz dans les requêtes SELECT. [\#3442](https://github.com/ClickHouse/ClickHouse/pull/3442) +- Ajout d'un test de stress pour les commits, qui effectue des tests fonctionnels en parallèle et dans un ordre aléatoire pour détecter plus de conditions de course. [\#3438](https://github.com/ClickHouse/ClickHouse/pull/3438) +- Amélioration de la méthode de démarrage de clickhouse-server dans une image Docker. [Elghazal Ahmed](https://github.com/ClickHouse/ClickHouse/pull/3663) +- Pour une image Docker, ajout du support pour l'initialisation des bases de données à l'aide de fichiers dans le `/docker-entrypoint-initdb.d` répertoire. [Konstantin Lebedev](https://github.com/ClickHouse/ClickHouse/pull/3695) +- Corrections pour les builds sur ARM. [\#3709](https://github.com/ClickHouse/ClickHouse/pull/3709) + +#### Modifications incompatibles en arrière: {#backward-incompatible-changes} + +- Retiré la possibilité de comparer la `Date` tapez avec un numéro. Plutôt `toDate('2018-12-18') = 17883`, vous devez utiliser la conversion de type explicite `= toDate(17883)` [\#3687](https://github.com/ClickHouse/ClickHouse/pull/3687) + +## Clickhouse version 18.14 {#clickhouse-release-18-14} + +### Clickhouse version 18.14.19, 2018-12-19 {#clickhouse-release-18-14-19-2018-12-19} + +#### Corrections de bugs: {#bug-fixes-2} + +- Correction d'une erreur qui a conduit à des problèmes avec la mise à jour des dictionnaires avec la source ODBC. [\#3825](https://github.com/ClickHouse/ClickHouse/issues/3825), [\#3829](https://github.com/ClickHouse/ClickHouse/issues/3829) +- Les bases de données sont correctement spécifiées lors de L'exécution de DDL `ON CLUSTER` requête. [\#3460](https://github.com/ClickHouse/ClickHouse/pull/3460) +- Correction d'un segfault si le `max_temporary_non_const_columns` limite a été dépassée. [\#3788](https://github.com/ClickHouse/ClickHouse/pull/3788) + +#### Construire des améliorations: {#build-improvements-2} + +- Corrections pour les builds sur ARM. + +### Clickhouse version 18.14.18, 2018-12-04 {#clickhouse-release-18-14-18-2018-12-04} + +#### Corrections de bugs: {#bug-fixes-3} + +- Correction d'une erreur dans `dictGet...` fonction pour les dictionnaires de type `range` si un des arguments est constante et l'autre ne l'est pas. [\#3751](https://github.com/ClickHouse/ClickHouse/pull/3751) +- Correction d'une erreur qui a causé des messages `netlink: '...': attribute type 1 has an invalid length` pour être imprimé dans le journal du noyau Linux, cela ne se passait que sur des versions assez fraîches du noyau Linux. [\#3749](https://github.com/ClickHouse/ClickHouse/pull/3749) +- Fixe erreur de segmentation en fonction `empty` pour l'argument de `FixedString` type. [Daniel, Dao Quang Minh](https://github.com/ClickHouse/ClickHouse/pull/3703) +- Correction d'une allocation de mémoire excessive lors de l'utilisation d'une grande valeur de `max_query_size` (a la mémoire de morceau de `max_query_size` octets a été préalloué à la fois). [\#3720](https://github.com/ClickHouse/ClickHouse/pull/3720) + +#### Construire des changements: {#build-changes} + +- Correction de la construction avec les bibliothèques LLVM/Clang de la version 7 à partir des paquets du système D'exploitation (ces bibliothèques sont utilisées pour la compilation de requêtes d'exécution). [\#3582](https://github.com/ClickHouse/ClickHouse/pull/3582) + +### Clickhouse version 18.14.17, 2018-11-30 {#clickhouse-release-18-14-17-2018-11-30} + +#### Corrections de bugs: {#bug-fixes-4} + +- Correction de cas où le processus de pont ODBC ne s'est pas terminé avec le processus du serveur principal. [\#3642](https://github.com/ClickHouse/ClickHouse/pull/3642) +- Insertion synchrone fixe dans le `Distributed` table avec une liste des colonnes qui diffère de la liste des colonnes de la table distante. [\#3673](https://github.com/ClickHouse/ClickHouse/pull/3673) +- Correction d'une condition de concurrence rare qui peut conduire à un crash lors de la suppression D'une table MergeTree. [\#3643](https://github.com/ClickHouse/ClickHouse/pull/3643) +- Correction d'un blocage de requête dans le cas où la création de thread de requête échoue avec le `Resource temporarily unavailable` erreur. [\#3643](https://github.com/ClickHouse/ClickHouse/pull/3643) +- Fixe de l'analyse de l' `ENGINE` clause lorsque le `CREATE AS table` la syntaxe a été utilisée et `ENGINE` la clause a été spécifiée avant le `AS table` (l'erreur a entraîné en ignorant le moteur). [\#3692](https://github.com/ClickHouse/ClickHouse/pull/3692) + +### Clickhouse version 18.14.15, 2018-11-21 {#clickhouse-release-18-14-15-2018-11-21} + +#### Corrections de bugs: {#bug-fixes-5} + +- La taille du bloc de mémoire a été surestimée lors de la désérialisation de la colonne de type `Array(String)` qui conduit à “Memory limit exceeded” erreur. Le problème est apparu dans la version 18.12.13. [\#3589](https://github.com/ClickHouse/ClickHouse/issues/3589) + +### Clickhouse version 18.14.14, 2018-11-20 {#clickhouse-release-18-14-14-2018-11-20} + +#### Corrections de bugs: {#bug-fixes-6} + +- Fixe `ON CLUSTER` requêtes lorsque le cluster est configuré comme sécurisé (indicateur ``). [\#3599](https://github.com/ClickHouse/ClickHouse/pull/3599) + +#### Construire des changements: {#build-changes-1} + +- Correction de problèmes (llvm-7 du système, macos) [\#3582](https://github.com/ClickHouse/ClickHouse/pull/3582) + +### Clickhouse version 18.14.13, 2018-11-08 {#clickhouse-release-18-14-13-2018-11-08} + +#### Corrections de bugs: {#bug-fixes-7} + +- Correction de l' `Block structure mismatch in MergingSorted stream` erreur. [\#3162](https://github.com/ClickHouse/ClickHouse/issues/3162) +- Fixe `ON CLUSTER` requêtes dans le cas où les connexions sécurisées ont été activées dans la configuration du cluster (le `` drapeau). [\#3465](https://github.com/ClickHouse/ClickHouse/pull/3465) +- Correction d'une erreur dans les requêtes utilisées `SAMPLE`, `PREWHERE` et les colonnes alias. [\#3543](https://github.com/ClickHouse/ClickHouse/pull/3543) +- Correction d'un rare `unknown compression method` erreur lors de la `min_bytes_to_use_direct_io` le réglage a été activé. [3544](https://github.com/ClickHouse/ClickHouse/pull/3544) + +#### Amélioration des performances: {#performance-improvements} + +- Régression de performance fixe des requêtes avec `GROUP BY` de colonnes de type UInt16 ou Date lors de l'exécution sur les processeurs AMD EPYC. [Igor Lapko](https://github.com/ClickHouse/ClickHouse/pull/3512) +- Correction de la régression des performances des requêtes qui traitent les chaînes longues. [\#3530](https://github.com/ClickHouse/ClickHouse/pull/3530) + +#### Construire des améliorations: {#build-improvements-3} + +- Améliorations pour simplifier la construction Arcadia. [\#3475](https://github.com/ClickHouse/ClickHouse/pull/3475), [\#3535](https://github.com/ClickHouse/ClickHouse/pull/3535) + +### Clickhouse version 18.14.12, 2018-11-02 {#clickhouse-release-18-14-12-2018-11-02} + +#### Corrections de bugs: {#bug-fixes-8} + +- Correction d'un plantage lors de la jonction de deux sous-requêtes sans nom. [\#3505](https://github.com/ClickHouse/ClickHouse/pull/3505) +- Fixe générant des requêtes incorrectes (avec un vide `WHERE` clause) lors de l'interrogation de bases de données externes. [hotid](https://github.com/ClickHouse/ClickHouse/pull/3477) +- Correction en utilisant une valeur de délai d'attente incorrecte Dans les dictionnaires ODBC. [Marek Vavruša](https://github.com/ClickHouse/ClickHouse/pull/3511) + +### Clickhouse version 18.14.11, 2018-10-29 {#clickhouse-release-18-14-11-2018-10-29} + +#### Corrections de bugs: {#bug-fixes-9} + +- Correction de l'erreur `Block structure mismatch in UNION stream: different number of columns` dans les requêtes LIMIT. [\#2156](https://github.com/ClickHouse/ClickHouse/issues/2156) +- Correction d'erreurs lors de la fusion de données dans des tables contenant des tableaux à l'intérieur de structures imbriquées. [\#3397](https://github.com/ClickHouse/ClickHouse/pull/3397) +- Correction de résultats de requête incorrects si le `merge_tree_uniform_read_distribution` paramètre est désactivé (il est activé par défaut). [\#3429](https://github.com/ClickHouse/ClickHouse/pull/3429) +- Correction d'une erreur sur les insertions à une table distribuée au format natif. [\#3411](https://github.com/ClickHouse/ClickHouse/issues/3411) + +### Clickhouse version 18.14.10, 2018-10-23 {#clickhouse-release-18-14-10-2018-10-23} + +- Le `compile_expressions` le paramètre (compilation JIT d'expressions) est désactivé par défaut. [\#3410](https://github.com/ClickHouse/ClickHouse/pull/3410) +- Le `enable_optimize_predicate_expression` paramètre est désactivé par défaut. + +### Clickhouse version 18.14.9, 2018-10-16 {#clickhouse-release-18-14-9-2018-10-16} + +#### Nouveauté: {#new-features-1} + +- Le `WITH CUBE` le modificateur `GROUP BY` (la syntaxe alternative `GROUP BY CUBE(...)` est également disponible). [\#3172](https://github.com/ClickHouse/ClickHouse/pull/3172) +- Ajouté le `formatDateTime` fonction. [Alexandr Krasheninnikov](https://github.com/ClickHouse/ClickHouse/pull/2770) +- Ajouté le `JDBC` tableau moteur et `jdbc` fonction table (nécessite l'installation de clickhouse-JDBC-bridge). [Alexandr Krasheninnikov](https://github.com/ClickHouse/ClickHouse/pull/3210) +- Ajout de fonctions pour travailler avec le numéro de semaine ISO: `toISOWeek`, `toISOYear`, `toStartOfISOYear`, et `toDayOfYear`. [\#3146](https://github.com/ClickHouse/ClickHouse/pull/3146) +- Maintenant, vous pouvez utiliser `Nullable` colonnes pour `MySQL` et `ODBC` table. [\#3362](https://github.com/ClickHouse/ClickHouse/pull/3362) +- Imbriquée structures de données peuvent être lues comme des objets imbriqués dans `JSONEachRow` format. Ajouté le `input_format_import_nested_json` paramètre. [Veloman Yunkan](https://github.com/ClickHouse/ClickHouse/pull/3144) +- Le traitement parallèle est disponible pour beaucoup `MATERIALIZED VIEW`s lors de l'insertion de données. Voir la `parallel_view_processing` paramètre. [Marek Vavruša](https://github.com/ClickHouse/ClickHouse/pull/3208) +- Ajouté le `SYSTEM FLUSH LOGS` requête (vidage forcé des journaux sur les tables système telles que `query_log`) [\#3321](https://github.com/ClickHouse/ClickHouse/pull/3321) +- Maintenant, vous pouvez utiliser prédéfinis `database` et `table` macros lors de la déclaration `Replicated` table. [\#3251](https://github.com/ClickHouse/ClickHouse/pull/3251) +- A ajouté la capacité de lire `Decimal` valeurs de type en notation d'ingénierie (indiquant des puissances de dix). [\#3153](https://github.com/ClickHouse/ClickHouse/pull/3153) + +#### Caractéristiques expérimentales: {#experimental-features} + +- Optimisation de la clause GROUP BY pour `LowCardinality data types.` [\#3138](https://github.com/ClickHouse/ClickHouse/pull/3138) +- Calcul optimisé des expressions pour `LowCardinality data types.` [\#3200](https://github.com/ClickHouse/ClickHouse/pull/3200) + +#### Amélioration: {#improvements-2} + +- Consommation de mémoire considérablement réduite pour les requêtes avec `ORDER BY` et `LIMIT`. Voir la `max_bytes_before_remerge_sort` paramètre. [\#3205](https://github.com/ClickHouse/ClickHouse/pull/3205) +- En l'absence de `JOIN` (`LEFT`, `INNER`, …), `INNER JOIN` est supposé. [\#3147](https://github.com/ClickHouse/ClickHouse/pull/3147) +- Qualifié astérisques fonctionner correctement dans les requêtes avec `JOIN`. [L'Hiver Zhang](https://github.com/ClickHouse/ClickHouse/pull/3202) +- Le `ODBC` table engine choisit correctement la méthode de citation des identifiants dans le dialecte SQL d'une base de données distante. [Alexandr Krasheninnikov](https://github.com/ClickHouse/ClickHouse/pull/3210) +- Le `compile_expressions` le paramètre (compilation JIT des expressions) est activé par défaut. +- Correction du comportement pour la base de données/TABLE DROP simultanée si existe et créer une base de données/TABLE si N'existe pas. Auparavant, un `CREATE DATABASE ... IF NOT EXISTS` requête peut renvoyer le message d'erreur “File … already exists” et la `CREATE TABLE ... IF NOT EXISTS` et `DROP TABLE IF EXISTS` les requêtes peuvent revenir `Table ... is creating or attaching right now`. [\#3101](https://github.com/ClickHouse/ClickHouse/pull/3101) +- Les expressions LIKE ET IN avec une moitié droite constante sont passées au serveur distant lors de l'interrogation à partir de tables MySQL ou ODBC. [\#3182](https://github.com/ClickHouse/ClickHouse/pull/3182) +- Les comparaisons avec des expressions constantes dans une clause WHERE sont transmises au serveur distant lors de l'interrogation à partir de tables MySQL et ODBC. Auparavant, seules les comparaisons avec les constantes étaient passées. [\#3182](https://github.com/ClickHouse/ClickHouse/pull/3182) +- Calcul Correct de la largeur de ligne dans le terminal pour `Pretty` formats, y compris les chaînes avec des hiéroglyphes. [Amos Oiseau](https://github.com/ClickHouse/ClickHouse/pull/3257). +- `ON CLUSTER` peut être spécifié pour `ALTER UPDATE` requête. +- Amélioration des performances de lecture des données `JSONEachRow` format. [\#3332](https://github.com/ClickHouse/ClickHouse/pull/3332) +- Ajouté synonymes pour le `LENGTH` et `CHARACTER_LENGTH` fonctions de compatibilité. Le `CONCAT` la fonction n'est plus sensible à la casse. [\#3306](https://github.com/ClickHouse/ClickHouse/pull/3306) +- Ajouté le `TIMESTAMP` synonyme de la `DateTime` type. [\#3390](https://github.com/ClickHouse/ClickHouse/pull/3390) +- Il y a toujours de l'espace réservé pour query\_id dans les journaux du serveur, même si la ligne de journal n'est pas liée à une requête. Cela facilite l'analyse des journaux de texte du serveur avec des outils tiers. +- La consommation de mémoire par une requête est enregistrée lorsqu'il dépasse le niveau suivant d'un nombre entier de gigaoctets. [\#3205](https://github.com/ClickHouse/ClickHouse/pull/3205) +- Ajout du mode de compatibilité pour le cas où la bibliothèque cliente qui utilise le protocole natif envoie moins de colonnes par erreur que ce que le serveur attend pour la requête D'insertion. Ce scénario était possible lors de l'utilisation de la bibliothèque clickhouse-cpp. Auparavant, ce scénario provoquait le plantage du serveur. [\#3171](https://github.com/ClickHouse/ClickHouse/pull/3171) +- Dans une expression WHERE définie par l'utilisateur `clickhouse-copier` vous pouvez maintenant utiliser un `partition_key` alias (pour un filtrage supplémentaire par partition de table source). Ceci est utile si le schéma de partitionnement change pendant la copie, mais ne change que légèrement. [\#3166](https://github.com/ClickHouse/ClickHouse/pull/3166) +- Le flux de travail du `Kafka` le moteur a été déplacé vers un pool de threads en arrière-plan afin de réduire automatiquement la vitesse de lecture des données à des charges élevées. [Marek Vavruša](https://github.com/ClickHouse/ClickHouse/pull/3215). +- Support pour la lecture `Tuple` et `Nested` valeurs de structures comme `struct` dans le `Cap'n'Proto format`. [Marek Vavruša](https://github.com/ClickHouse/ClickHouse/pull/3216) +- La liste des domaines de premier niveau pour les `firstSignificantSubdomain` la fonction inclut maintenant le domaine `biz`. [décaséale](https://github.com/ClickHouse/ClickHouse/pull/3219) +- Dans la configuration des dictionnaires externes, `null_value` est interprétée comme la valeur du type de données par défaut. [\#3330](https://github.com/ClickHouse/ClickHouse/pull/3330) +- Soutien pour le `intDiv` et `intDivOrZero` fonctions pour `Decimal`. [b48402e8](https://github.com/ClickHouse/ClickHouse/commit/b48402e8712e2b9b151e0eef8193811d433a1264) +- Soutien pour le `Date`, `DateTime`, `UUID`, et `Decimal` types comme clé pour le `sumMap` fonction d'agrégation. [\#3281](https://github.com/ClickHouse/ClickHouse/pull/3281) +- Soutien pour le `Decimal` type de données dans les dictionnaires externes. [\#3324](https://github.com/ClickHouse/ClickHouse/pull/3324) +- Soutien pour le `Decimal` type de données dans `SummingMergeTree` table. [\#3348](https://github.com/ClickHouse/ClickHouse/pull/3348) +- Ajouté spécialisations pour `UUID` dans `if`. [\#3366](https://github.com/ClickHouse/ClickHouse/pull/3366) +- Réduit le nombre de `open` et `close` les appels système lors de la lecture d'un `MergeTree table`. [\#3283](https://github.com/ClickHouse/ClickHouse/pull/3283) +- A `TRUNCATE TABLE` requête peut être exécutée sur n'importe quel réplica (la requête est transmise au chef de réplique). [Kirill Shvakov](https://github.com/ClickHouse/ClickHouse/pull/3375) + +#### Corrections de bugs: {#bug-fixes-10} + +- Correction d'un problème avec `Dictionary` tables pour `range_hashed` dictionnaire. Cette erreur s'est produite dans la version 18.12.17. [\#1702](https://github.com/ClickHouse/ClickHouse/pull/1702) +- Correction d'une erreur lors du chargement `range_hashed` les dictionnaires (le message `Unsupported type Nullable (...)`). Cette erreur s'est produite dans la version 18.12.17. [\#3362](https://github.com/ClickHouse/ClickHouse/pull/3362) +- Corrigé des erreurs dans la `pointInPolygon` fonction due à l'accumulation de calculs inexacts pour les polygones avec un grand nombre de sommets situés à proximité les uns des autres. [\#3331](https://github.com/ClickHouse/ClickHouse/pull/3331) [\#3341](https://github.com/ClickHouse/ClickHouse/pull/3341) +- Si, après la fusion de parties de données, la somme de contrôle de la partie résultante diffère du résultat de la même fusion dans une autre réplique, le résultat de la fusion est supprimé et la partie de données est téléchargée à partir de l'autre réplique (c'est le comportement correct). Mais après avoir téléchargé la partie data, elle n'a pas pu être ajoutée à l'ensemble de travail en raison d'une erreur indiquant que la partie existe déjà (car la partie data a été supprimée avec un certain retard après la fusion). Cela a conduit à cycliques tente de télécharger les mêmes données. [\#3194](https://github.com/ClickHouse/ClickHouse/pull/3194) +- Correction d'un calcul incorrect de la consommation totale de mémoire par les requêtes (en raison d'un calcul incorrect, le `max_memory_usage_for_all_queries` le réglage n'a pas fonctionné correctement et le `MemoryTracking` métrique a une valeur incorrecte). Cette erreur s'est produite dans la version 18.12.13. [Marek Vavruša](https://github.com/ClickHouse/ClickHouse/pull/3344) +- Correction de la fonctionnalité de `CREATE TABLE ... ON CLUSTER ... AS SELECT ...` Cette erreur s'est produite dans la version 18.12.13. [\#3247](https://github.com/ClickHouse/ClickHouse/pull/3247) +- Correction de la préparation inutile des structures de données pour `JOIN`s sur le serveur qui initie la requête si `JOIN` est effectué uniquement sur des serveurs distants. [\#3340](https://github.com/ClickHouse/ClickHouse/pull/3340) +- Correction de bugs dans le `Kafka` engine: blocages après les exceptions lors du démarrage de la lecture des données, et verrous à la fin [Marek Vavruša](https://github.com/ClickHouse/ClickHouse/pull/3215). +- Pour `Kafka` tableaux, le facultatif `schema` le paramètre n'a pas été passé (le schéma du `Cap'n'Proto` format). [Vojtech Splichal](https://github.com/ClickHouse/ClickHouse/pull/3150) +- Si L'ensemble des serveurs ZooKeeper a des serveurs qui acceptent la connexion mais la ferment immédiatement au lieu de répondre à la prise de contact, ClickHouse choisit de connecter un autre serveur. Auparavant, cela produisait l'erreur `Cannot read all data. Bytes read: 0. Bytes expected: 4.` et le serveur ne pouvait pas commencer. [8218cf3a](https://github.com/ClickHouse/ClickHouse/commit/8218cf3a5f39a43401953769d6d12a0bb8d29da9) +- Si L'ensemble des serveurs ZooKeeper contient des serveurs pour lesquels la requête DNS renvoie une erreur, ces serveurs sont ignorés. [17b8e209](https://github.com/ClickHouse/ClickHouse/commit/17b8e209221061325ad7ba0539f03c6e65f87f29) +- Conversion de type fixe entre `Date` et `DateTime` lors de l'insertion de données dans le `VALUES` format (si `input_format_values_interpret_expressions = 1`). Auparavant, la conversion était effectuée entre la valeur numérique du nombre de jours dans Unix Epoch time et L'horodatage Unix, ce qui conduisait à des résultats inattendus. [\#3229](https://github.com/ClickHouse/ClickHouse/pull/3229) +- Conversion de type corrigée entre `Decimal` et des nombres entiers. [\#3211](https://github.com/ClickHouse/ClickHouse/pull/3211) +- Corrigé des erreurs dans la `enable_optimize_predicate_expression` paramètre. [L'Hiver Zhang](https://github.com/ClickHouse/ClickHouse/pull/3231) +- Correction d'une erreur D'analyse au format CSV avec des nombres à virgule flottante si un séparateur CSV non par défaut est utilisé, tel que `;` [\#3155](https://github.com/ClickHouse/ClickHouse/pull/3155) +- Correction de l' `arrayCumSumNonNegative` fonction (il n'accumule pas de valeurs négatives si l'accumulateur est inférieur à zéro). [Aleksey Studnev](https://github.com/ClickHouse/ClickHouse/pull/3163) +- Fixe comment `Merge` les tables de travail sur le dessus de `Distributed` tables lors de l'utilisation `PREWHERE`. [\#3165](https://github.com/ClickHouse/ClickHouse/pull/3165) +- Corrections de bugs dans l' `ALTER UPDATE` requête. +- Correction de bugs dans le `odbc` fonction de table apparue dans la version 18.12. [\#3197](https://github.com/ClickHouse/ClickHouse/pull/3197) +- Correction du fonctionnement des fonctions d'agrégat avec `StateArray` combinators. [\#3188](https://github.com/ClickHouse/ClickHouse/pull/3188) +- Correction d'un crash lors de la division d'une `Decimal` valeur par zéro. [69dd6609](https://github.com/ClickHouse/ClickHouse/commit/69dd6609193beb4e7acd3e6ad216eca0ccfb8179) +- Sortie fixe des types pour les opérations utilisant `Decimal` et des arguments entiers. [\#3224](https://github.com/ClickHouse/ClickHouse/pull/3224) +- Correction du segfault pendant `GROUP BY` sur `Decimal128`. [3359ba06](https://github.com/ClickHouse/ClickHouse/commit/3359ba06c39fcd05bfdb87d6c64154819621e13a) +- Le `log_query_threads` le paramètre (journalisation des informations sur chaque thread d'exécution de la requête) ne prend effet que si `log_queries` l'option (journalisation des informations sur les requêtes) est définie sur 1. Depuis le `log_query_threads` l'option est activée par défaut, les informations sur les threads ont déjà été enregistrées même si la journalisation des requêtes a été désactivée. [\#3241](https://github.com/ClickHouse/ClickHouse/pull/3241) +- Correction d'une erreur dans le fonctionnement distribué de la fonction d'agrégat quantiles (le message d'erreur `Not found column quantile...`). [292a8855](https://github.com/ClickHouse/ClickHouse/commit/292a885533b8e3b41ce8993867069d14cbd5a664) +- Correction du problème de compatibilité lorsque vous travaillez sur un cluster de serveurs de version 18.12.17 et de serveurs plus anciens en même temps. Pour les requêtes distribuées avec des clés GROUP BY de longueur fixe et non fixe, s'il y avait une grande quantité de données à agréger, les données renvoyées n'étaient pas toujours entièrement agrégées (deux lignes différentes contenaient les mêmes clés d'agrégation). [\#3254](https://github.com/ClickHouse/ClickHouse/pull/3254) +- Manipulation fixe des substitutions dans `clickhouse-performance-test` si la requête ne contient qu'une partie des substitutions déclaré dans le test. [\#3263](https://github.com/ClickHouse/ClickHouse/pull/3263) +- Correction d'une erreur lors de l'utilisation `FINAL` avec `PREWHERE`. [\#3298](https://github.com/ClickHouse/ClickHouse/pull/3298) +- Correction d'une erreur lors de l'utilisation `PREWHERE` sur les colonnes qui ont été ajoutées pendant `ALTER`. [\#3298](https://github.com/ClickHouse/ClickHouse/pull/3298) +- Ajout d'une vérification de l'absence de `arrayJoin` pour `DEFAULT` et `MATERIALIZED` expression. Précédemment, `arrayJoin` conduit à une erreur lors de l'insertion de données. [\#3337](https://github.com/ClickHouse/ClickHouse/pull/3337) +- Ajout d'une vérification de l'absence de `arrayJoin` dans un `PREWHERE` clause. Auparavant, cela a conduit à des messages comme `Size ... doesn't match` ou `Unknown compression method` lors de l'exécution de requêtes. [\#3357](https://github.com/ClickHouse/ClickHouse/pull/3357) +- Correction de segfault qui pourrait se produire dans de rares cas après l'optimisation qui a remplacé et chaînes des évaluations d'égalité avec l'expression IN correspondante. [liuyimin-bytedance](https://github.com/ClickHouse/ClickHouse/pull/3339) +- Corrections mineures à `clickhouse-benchmark`: auparavant, les informations client n'étaient pas envoyées au serveur; maintenant, le nombre de requêtes exécutées est calculé plus précisément lors de l'arrêt et pour limiter le nombre d'itérations. [\#3351](https://github.com/ClickHouse/ClickHouse/pull/3351) [\#3352](https://github.com/ClickHouse/ClickHouse/pull/3352) + +#### Modifications incompatibles en arrière: {#backward-incompatible-changes-1} + +- Enlevé le `allow_experimental_decimal_type` option. Le `Decimal` type de données est disponible pour utilisation par défaut. [\#3329](https://github.com/ClickHouse/ClickHouse/pull/3329) + +## Clickhouse Version 18.12 {#clickhouse-release-18-12} + +### Clickhouse version 18.12.17, 2018-09-16 {#clickhouse-release-18-12-17-2018-09-16} + +#### Nouveauté: {#new-features-2} + +- `invalidate_query` (la possibilité de spécifier une requête pour vérifier si un dictionnaire externe doit être mis à jour) est implémentée pour `clickhouse` source. [\#3126](https://github.com/ClickHouse/ClickHouse/pull/3126) +- Ajout de la possibilité d'utiliser `UInt*`, `Int*`, et `DateTime` types de données (avec le `Date` le type) comme un `range_hashed` clé de dictionnaire externe qui définit les limites des plages. Maintenant `NULL` peut être utilisé pour désigner un intervalle ouvert. [Vasily Nemkov](https://github.com/ClickHouse/ClickHouse/pull/3123) +- Le `Decimal` type prend maintenant en charge `var*` et `stddev*` les fonctions d'agrégation. [\#3129](https://github.com/ClickHouse/ClickHouse/pull/3129) +- Le `Decimal` type prend désormais en charge les fonctions mathématiques (`exp`, `sin` et ainsi de suite.) [\#3129](https://github.com/ClickHouse/ClickHouse/pull/3129) +- Le `system.part_log` la table a maintenant le `partition_id` colonne. [\#3089](https://github.com/ClickHouse/ClickHouse/pull/3089) + +#### Corrections de bugs: {#bug-fixes-11} + +- `Merge` fonctionne maintenant correctement sur `Distributed` table. [L'Hiver Zhang](https://github.com/ClickHouse/ClickHouse/pull/3159) +- Incompatibilité fixe (dépendance inutile sur le `glibc` version) qui a rendu impossible l'exécution de ClickHouse sur `Ubuntu Precise` et les anciennes versions. L'incompatibilité est apparue dans la version 18.12.13. [\#3130](https://github.com/ClickHouse/ClickHouse/pull/3130) +- Corrigé des erreurs dans la `enable_optimize_predicate_expression` paramètre. [L'Hiver Zhang](https://github.com/ClickHouse/ClickHouse/pull/3107) +- Correction d'un problème mineur de rétrocompatibilité apparu lors de l'utilisation d'un cluster de répliques sur des versions antérieures au 18.12.13 et de la création simultanée d'une nouvelle réplique d'une table sur un serveur avec une version plus récente (indiquée dans le message `Can not clone replica, because the ... updated to new ClickHouse version`, ce qui est logique, mais ne devrait pas arriver). [\#3122](https://github.com/ClickHouse/ClickHouse/pull/3122) + +#### Modifications incompatibles en arrière: {#backward-incompatible-changes-2} + +- Le `enable_optimize_predicate_expression` option est activée par défaut (ce qui est plutôt optimiste). Si des erreurs d'analyse de requête se produisent liées à la recherche des noms de colonnes, définissez `enable_optimize_predicate_expression` à 0. [L'Hiver Zhang](https://github.com/ClickHouse/ClickHouse/pull/3107) + +### Clickhouse version 18.12.14, 2018-09-13 {#clickhouse-release-18-12-14-2018-09-13} + +#### Nouveauté: {#new-features-3} + +- Ajout du support pour `ALTER UPDATE` requête. [\#3035](https://github.com/ClickHouse/ClickHouse/pull/3035) +- Ajouté le `allow_ddl` option, qui limite l'accès de L'utilisateur aux requêtes DDL. [\#3104](https://github.com/ClickHouse/ClickHouse/pull/3104) +- Ajouté le `min_merge_bytes_to_use_direct_io` option pour `MergeTree` moteurs, qui vous permet de définir un seuil pour la taille totale de la fusion (quand au-dessus du seuil, les fichiers de partie de données seront traités en utilisant O\_DIRECT). [\#3117](https://github.com/ClickHouse/ClickHouse/pull/3117) +- Le `system.merges` la table système contient maintenant `partition_id` colonne. [\#3099](https://github.com/ClickHouse/ClickHouse/pull/3099) + +#### Amélioration {#improvements-3} + +- Si une partie de données reste inchangée pendant la mutation, elle n'est pas téléchargée par les répliques. [\#3103](https://github.com/ClickHouse/ClickHouse/pull/3103) +- La saisie semi-automatique est disponible pour les noms de paramètres lorsque vous travaillez avec `clickhouse-client`. [\#3106](https://github.com/ClickHouse/ClickHouse/pull/3106) + +#### Corrections de bugs: {#bug-fixes-12} + +- Ajouter un chèque pour les montants des tableaux sont des éléments de `Nested` les champs de type lors de l'insertion. [\#3118](https://github.com/ClickHouse/ClickHouse/pull/3118) +- Correction d'une erreur de mise à jour des dictionnaires externes `ODBC` source et `hashed` stockage. Cette erreur s'est produite dans la version 18.12.13. +- Correction d'un plantage lors de la création d'une table temporaire à partir d'une requête `IN` condition. [L'Hiver Zhang](https://github.com/ClickHouse/ClickHouse/pull/3098) +- Correction d'une erreur dans les fonctions d'agrégation pour les tableaux peuvent avoir `NULL` élément. [L'Hiver Zhang](https://github.com/ClickHouse/ClickHouse/pull/3097) + +### Clickhouse version 18.12.13, 2018-09-10 {#clickhouse-release-18-12-13-2018-09-10} + +#### Nouveauté: {#new-features-4} + +- Ajouté le `DECIMAL(digits, scale)` type de données (`Decimal32(scale)`, `Decimal64(scale)`, `Decimal128(scale)`). Pour l'activer, utilisez le paramètre `allow_experimental_decimal_type`. [\#2846](https://github.com/ClickHouse/ClickHouse/pull/2846) [\#2970](https://github.com/ClickHouse/ClickHouse/pull/2970) [\#3008](https://github.com/ClickHouse/ClickHouse/pull/3008) [\#3047](https://github.com/ClickHouse/ClickHouse/pull/3047) +- Nouveau `WITH ROLLUP` le modificateur `GROUP BY` (syntaxe alternative: `GROUP BY ROLLUP(...)`). [\#2948](https://github.com/ClickHouse/ClickHouse/pull/2948) +- Dans les requêtes avec jointure, le caractère étoile se développe en une liste de colonnes dans toutes les tables, conformément à la norme SQL. Vous pouvez restaurer l'ancien comportement en paramètre `asterisk_left_columns_only` à 1 au niveau de la configuration utilisateur. [L'Hiver Zhang](https://github.com/ClickHouse/ClickHouse/pull/2787) +- Ajout du support pour joindre avec les fonctions de table. [L'Hiver Zhang](https://github.com/ClickHouse/ClickHouse/pull/2907) +- Saisie semi-automatique en appuyant sur Tab dans clickhouse-client. [Sergey Shcherbin](https://github.com/ClickHouse/ClickHouse/pull/2447) +- Ctrl + C dans clickhouse-client efface une requête qui a été entrée. [\#2877](https://github.com/ClickHouse/ClickHouse/pull/2877) +- Ajouté le `join_default_strictness` paramètre (valeurs: `"`, `'any'`, `'all'`). Cela vous permet de ne pas préciser `ANY` ou `ALL` pour `JOIN`. [\#2982](https://github.com/ClickHouse/ClickHouse/pull/2982) +- Chaque ligne du journal du serveur associée au traitement de la requête affiche L'ID de la requête. [\#2482](https://github.com/ClickHouse/ClickHouse/pull/2482) +- Maintenant, vous pouvez obtenir des journaux d'exécution de requête dans clickhouse-client (utilisez le `send_logs_level` paramètre). Avec le traitement des requêtes distribuées, les journaux sont cascadés à partir de tous les serveurs. [\#2482](https://github.com/ClickHouse/ClickHouse/pull/2482) +- Le `system.query_log` et `system.processes` (`SHOW PROCESSLIST` les tableaux ont maintenant des informations sur tous les paramètres modifiés lorsque vous exécutez une requête (la structure imbriquée de l' `Settings` données). Ajouté le `log_query_settings` paramètre. [\#2482](https://github.com/ClickHouse/ClickHouse/pull/2482) +- Le `system.query_log` et `system.processes` les tables affichent désormais des informations sur le nombre de threads participant à l'exécution de la requête (voir `thread_numbers` colonne). [\#2482](https://github.com/ClickHouse/ClickHouse/pull/2482) +- Ajouter `ProfileEvents` compteurs qui mesurent le temps passé à lire et à écrire sur le réseau et à lire et à écrire sur le disque, le nombre d'erreurs réseau et le temps passé à attendre lorsque la bande passante réseau est limitée. [\#2482](https://github.com/ClickHouse/ClickHouse/pull/2482) +- Ajouter `ProfileEvents`compteurs qui contiennent les métriques système de rusage (vous pouvez les utiliser pour obtenir des informations sur L'utilisation du processeur dans l'espace utilisateur et le noyau, les erreurs de page et les commutateurs de contexte), ainsi que les métriques taskstats (utilisez-les pour obtenir des informations sur le temps d'attente d'E/S, le temps D'attente du processeur et [\#2482](https://github.com/ClickHouse/ClickHouse/pull/2482) +- Le `ProfileEvents` les compteurs sont appliqués globalement et pour chaque requête, ainsi que pour chaque thread d'exécution de requête, ce qui vous permet de profiler la consommation de ressources par requête en détail. [\#2482](https://github.com/ClickHouse/ClickHouse/pull/2482) +- Ajouté le `system.query_thread_log` table, qui contient des informations sur chaque thread d'exécution de requête. Ajouté le `log_query_threads` paramètre. [\#2482](https://github.com/ClickHouse/ClickHouse/pull/2482) +- Le `system.metrics` et `system.events` les tables ont maintenant une documentation intégrée. [\#3016](https://github.com/ClickHouse/ClickHouse/pull/3016) +- Ajouté le `arrayEnumerateDense` fonction. [Amos Oiseau](https://github.com/ClickHouse/ClickHouse/pull/2975) +- Ajouté le `arrayCumSumNonNegative` et `arrayDifference` fonction. [Aleksey Studnev](https://github.com/ClickHouse/ClickHouse/pull/2942) +- Ajouté le `retention` fonction d'agrégation. [Sundy Li](https://github.com/ClickHouse/ClickHouse/pull/2887) +- Vous pouvez maintenant ajouter (fusionner) des états de fonctions d'agrégat en utilisant l'opérateur plus et multiplier les états de fonctions d'agrégat par une constante non négative. [\#3062](https://github.com/ClickHouse/ClickHouse/pull/3062) [\#3034](https://github.com/ClickHouse/ClickHouse/pull/3034) +- Les Tables de la famille MergeTree ont maintenant la colonne virtuelle `_partition_id`. [\#3089](https://github.com/ClickHouse/ClickHouse/pull/3089) + +#### Caractéristiques expérimentales: {#experimental-features-1} + +- Ajouté le `LowCardinality(T)` type de données. Ce type de données crée automatiquement un dictionnaire local de valeurs et permet le traitement des données sans déballer le dictionnaire. [\#2830](https://github.com/ClickHouse/ClickHouse/pull/2830) +- Ajout d'un cache de fonctions compilées JIT et d'un compteur pour le nombre d'utilisations avant la compilation. Pour compiler des expressions JIT, activez `compile_expressions` paramètre. [\#2990](https://github.com/ClickHouse/ClickHouse/pull/2990) [\#3077](https://github.com/ClickHouse/ClickHouse/pull/3077) + +#### Amélioration: {#improvements-4} + +- Correction du problème avec l'accumulation illimitée du journal de réplication quand il y a des répliques abandonnées. Ajout d'un mode de récupération efficace pour les répliques avec un long décalage. +- Amélioration des performances de `GROUP BY` avec l'agrégation de plusieurs champs lorsque l'un d'eux est une chaîne et les autres sont de longueur fixe. +- Amélioration des performances lors de l'utilisation `PREWHERE` et avec transfert implicite d'expressions dans `PREWHERE`. +- Amélioration des performances d'analyse pour les formats de texte (`CSV`, `TSV`). [Amos Oiseau](https://github.com/ClickHouse/ClickHouse/pull/2977) [\#2980](https://github.com/ClickHouse/ClickHouse/pull/2980) +- Amélioration des performances de lecture des chaînes et des tableaux dans les formats binaires. [Amos Oiseau](https://github.com/ClickHouse/ClickHouse/pull/2955) +- Augmentation des performances et réduction de la consommation de mémoire pour les requêtes `system.tables` et `system.columns` quand il y a un très grand nombre de tables sur un seul serveur. [\#2953](https://github.com/ClickHouse/ClickHouse/pull/2953) +- Correction d'un problème de performances dans le cas d'un grand flux de requêtes résultant en une erreur (la `_dl_addr` la fonction est visible dans `perf top` mais le serveur n'utilise pas beaucoup de CPU). [\#2938](https://github.com/ClickHouse/ClickHouse/pull/2938) +- Les Conditions sont converties dans la vue (lorsque `enable_optimize_predicate_expression` est activé). [L'Hiver Zhang](https://github.com/ClickHouse/ClickHouse/pull/2907) +- Améliorations de la fonctionnalité pour le `UUID` type de données. [\#3074](https://github.com/ClickHouse/ClickHouse/pull/3074) [\#2985](https://github.com/ClickHouse/ClickHouse/pull/2985) +- Le `UUID` le type de données est pris en charge dans les dictionnaires-Alchemist. [\#2822](https://github.com/ClickHouse/ClickHouse/pull/2822) +- Le `visitParamExtractRaw` la fonction fonctionne correctement avec les structures imbriquées. [L'Hiver Zhang](https://github.com/ClickHouse/ClickHouse/pull/2974) +- Lorsque l' `input_format_skip_unknown_fields` paramètre est activé, les champs d'objet dans `JSONEachRow` format sont ignorés correctement. [BlahGeek](https://github.com/ClickHouse/ClickHouse/pull/2958) +- Pour un `CASE` expression avec conditions, vous pouvez maintenant omettre `ELSE`, ce qui est équivalent à `ELSE NULL`. [\#2920](https://github.com/ClickHouse/ClickHouse/pull/2920) +- Le délai d'attente de l'opération peut maintenant être configuré lorsque vous travaillez avec ZooKeeper. [urykhy](https://github.com/ClickHouse/ClickHouse/pull/2971) +- Vous pouvez spécifier un décalage pour `LIMIT n, m` comme `LIMIT n OFFSET m`. [\#2840](https://github.com/ClickHouse/ClickHouse/pull/2840) +- Vous pouvez utiliser l' `SELECT TOP n` syntaxe comme alternative pour `LIMIT`. [\#2840](https://github.com/ClickHouse/ClickHouse/pull/2840) +- Augmentation de la taille de la file d'attente pour écrire dans les tables `SystemLog parameter queue is full` l'erreur ne se produit pas aussi souvent. +- Le `windowFunnel` fonction d'agrégation prend désormais en charge les événements qui répondent à plusieurs conditions. [Amos Oiseau](https://github.com/ClickHouse/ClickHouse/pull/2801) +- Les colonnes dupliquées peuvent être utilisées dans un `USING` la clause de `JOIN`. [\#3006](https://github.com/ClickHouse/ClickHouse/pull/3006) +- `Pretty` formats maintenant avoir une limite sur l'alignement des colonnes de largeur. L'utilisation de la `output_format_pretty_max_column_pad_width` paramètre. Si une valeur est plus large, il sera toujours affichée dans son intégralité, mais les autres cellules dans le tableau ne sera pas trop large. [\#3003](https://github.com/ClickHouse/ClickHouse/pull/3003) +- Le `odbc` la fonction table vous permet maintenant de spécifier le nom de la base de données / schéma. [Amos Oiseau](https://github.com/ClickHouse/ClickHouse/pull/2885) +- Ajout de la possibilité d'utiliser un nom d'utilisateur spécifié dans le `clickhouse-client` fichier de configuration. [Vladimir Kozbin](https://github.com/ClickHouse/ClickHouse/pull/2909) +- Le `ZooKeeperExceptions` compteur a été divisé en trois compteurs: `ZooKeeperUserExceptions`, `ZooKeeperHardwareExceptions`, et `ZooKeeperOtherExceptions`. +- `ALTER DELETE` les requêtes fonctionnent pour les vues matérialisées. +- Ajouté randomisation lors de l'exécution du thread de nettoyage périodiquement pour `ReplicatedMergeTree` afin d'éviter les pics de charge périodiques lorsqu'il y a un très grand nombre de `ReplicatedMergeTree` table. +- Soutien pour `ATTACH TABLE ... ON CLUSTER` requête. [\#3025](https://github.com/ClickHouse/ClickHouse/pull/3025) + +#### Corrections de bugs: {#bug-fixes-13} + +- Correction d'un problème avec `Dictionary` tables (jette le `Size of offsets doesn't match size of column` ou `Unknown compression method` exception). Ce bug est apparu dans la version 18.10.3. [\#2913](https://github.com/ClickHouse/ClickHouse/issues/2913) +- Correction d'un bug lors de la fusion `CollapsingMergeTree` tables si l'une des parties de données est vide (ces parties sont formées lors de la fusion ou `ALTER DELETE` si toutes les données ont été supprimées), et le `vertical` l'algorithme a été utilisé pour la fusion. [\#3049](https://github.com/ClickHouse/ClickHouse/pull/3049) +- Correction d'une condition de course pendant `DROP` ou `TRUNCATE` pour `Memory` tables simultanément `SELECT`, ce qui pourrait conduire à des pannes de serveur. Ce bug est apparu dans la version 1.1.54388. [\#3038](https://github.com/ClickHouse/ClickHouse/pull/3038) +- Correction de la possibilité de perte de données lors de l'insertion dans `Replicated` des tables, si la `Session is expired` l'erreur est renvoyée (la perte de données peut être détectée par le `ReplicatedDataLoss` métrique). Cette erreur s'est produite dans la version 1.1.54378. [\#2939](https://github.com/ClickHouse/ClickHouse/pull/2939) [\#2949](https://github.com/ClickHouse/ClickHouse/pull/2949) [\#2964](https://github.com/ClickHouse/ClickHouse/pull/2964) +- Correction d'un segfault pendant `JOIN ... ON`. [\#3000](https://github.com/ClickHouse/ClickHouse/pull/3000) +- Correction de l'erreur de recherche des noms de colonne lorsque le `WHERE` expression se compose entièrement d'un nom de colonne qualifié, tel que `WHERE table.column`. [\#2994](https://github.com/ClickHouse/ClickHouse/pull/2994) +- Correction de l' “Not found column” erreur survenue lors de l'exécution de requêtes distribuées si une seule colonne composée d'une expression avec une sous-requête est demandée à partir d'un serveur distant. [\#3087](https://github.com/ClickHouse/ClickHouse/pull/3087) +- Correction de l' `Block structure mismatch in UNION stream: different number of columns` erreur qui s'est produite pour les requêtes distribuées si l'un des fragments est locale et l'autre ne l'est pas, et l'optimisation de la déplacer à `PREWHERE` est déclenchée. [\#2226](https://github.com/ClickHouse/ClickHouse/pull/2226) [\#3037](https://github.com/ClickHouse/ClickHouse/pull/3037) [\#3055](https://github.com/ClickHouse/ClickHouse/pull/3055) [\#3065](https://github.com/ClickHouse/ClickHouse/pull/3065) [\#3073](https://github.com/ClickHouse/ClickHouse/pull/3073) [\#3090](https://github.com/ClickHouse/ClickHouse/pull/3090) [\#3093](https://github.com/ClickHouse/ClickHouse/pull/3093) +- Correction de l' `pointInPolygon` fonction pour certains cas de polygones non convexes. [\#2910](https://github.com/ClickHouse/ClickHouse/pull/2910) +- Correction du résultat incorrect lors de la comparaison `nan` avec des entiers. [\#3024](https://github.com/ClickHouse/ClickHouse/pull/3024) +- Correction d'une erreur dans le `zlib-ng` bibliothèque qui pourrait conduire à segfault dans de rares cas. [\#2854](https://github.com/ClickHouse/ClickHouse/pull/2854) +- Correction d'une fuite de mémoire lors de l'insertion dans une table avec `AggregateFunction` colonnes, si l'état de la fonction d'agrégat n'est pas simple (alloue la mémoire séparément), et si une seule demande d'insertion entraîne plusieurs petits blocs. [\#3084](https://github.com/ClickHouse/ClickHouse/pull/3084) +- Correction d'une condition de concurrence lors de la création et la suppression de la même `Buffer` ou `MergeTree` table en même temps. +- Correction de la possibilité d'un segfault lors de la comparaison des tuples constitués de certains types non triviaux, tels que les tuples. [\#2989](https://github.com/ClickHouse/ClickHouse/pull/2989) +- Correction de la possibilité d'un segfault lors de l'exécution de certains `ON CLUSTER` requête. [L'Hiver Zhang](https://github.com/ClickHouse/ClickHouse/pull/2960) +- Correction d'une erreur dans le `arrayDistinct` fonction pour `Nullable` les éléments du tableau. [\#2845](https://github.com/ClickHouse/ClickHouse/pull/2845) [\#2937](https://github.com/ClickHouse/ClickHouse/pull/2937) +- Le `enable_optimize_predicate_expression` option prend en charge correctement les cas avec `SELECT *`. [L'Hiver Zhang](https://github.com/ClickHouse/ClickHouse/pull/2929) +- Correction du segfault lors de la réinitialisation de la session ZooKeeper. [\#2917](https://github.com/ClickHouse/ClickHouse/pull/2917) +- Blocage potentiel fixe lorsque vous travaillez avec ZooKeeper. +- Correction d'un code incorrect pour ajouter des structures de données imbriquées dans un `SummingMergeTree`. +- Lors de l'allocation de mémoire pour les états de fonctions d'agrégat, l'alignement est correctement pris en compte, ce qui permet d'utiliser des opérations nécessitant un alignement lors de la mise en œuvre des états de fonctions d'agrégat. [chenxing-xc](https://github.com/ClickHouse/ClickHouse/pull/2808) + +#### Correction de sécurité: {#security-fix} + +- Utilisation sûre des sources de données ODBC. L'Interaction avec les pilotes ODBC utilise un `clickhouse-odbc-bridge` processus. Les erreurs dans les pilotes ODBC tiers ne causent plus de problèmes de stabilité du serveur ou de vulnérabilités. [\#2828](https://github.com/ClickHouse/ClickHouse/pull/2828) [\#2879](https://github.com/ClickHouse/ClickHouse/pull/2879) [\#2886](https://github.com/ClickHouse/ClickHouse/pull/2886) [\#2893](https://github.com/ClickHouse/ClickHouse/pull/2893) [\#2921](https://github.com/ClickHouse/ClickHouse/pull/2921) +- Correction d'une validation incorrecte du chemin du fichier dans le `catBoostPool` table de fonction. [\#2894](https://github.com/ClickHouse/ClickHouse/pull/2894) +- Le contenu des tableaux du système (`tables`, `databases`, `parts`, `columns`, `parts_columns`, `merges`, `mutations`, `replicas`, et `replication_queue`) sont filtrés en fonction de l'accès configuré de l'utilisateur aux bases de données (`allow_databases`). [L'Hiver Zhang](https://github.com/ClickHouse/ClickHouse/pull/2856) + +#### Modifications incompatibles en arrière: {#backward-incompatible-changes-3} + +- Dans les requêtes avec jointure, le caractère étoile se développe en une liste de colonnes dans toutes les tables, conformément à la norme SQL. Vous pouvez restaurer l'ancien comportement en paramètre `asterisk_left_columns_only` à 1 au niveau de la configuration utilisateur. + +#### Construire des changements: {#build-changes-2} + +- La plupart des tests d'intégration peuvent maintenant être exécutés par commit. +- Les contrôles de style de Code peuvent également être exécutés par commit. +- Le `memcpy` l'implémentation est choisie correctement lors de la construction sur CentOS7/Fedora. [Etienne Champetier](https://github.com/ClickHouse/ClickHouse/pull/2912) +- Lorsque vous utilisez clang pour construire, certains avertissements de `-Weverything` ont été ajoutées, en plus de la `-Wall-Wextra -Werror`. [\#2957](https://github.com/ClickHouse/ClickHouse/pull/2957) +- Débogage de la construction utilise le `jemalloc` option de débogage. +- L'interface de la bibliothèque pour interagir avec ZooKeeper est déclarée abstraite. [\#2950](https://github.com/ClickHouse/ClickHouse/pull/2950) + +## Clickhouse version 18.10 {#clickhouse-release-18-10} + +### Clickhouse version 18.10.3, 2018-08-13 {#clickhouse-release-18-10-3-2018-08-13} + +#### Nouveauté: {#new-features-5} + +- HTTPS peut être utilisé pour la réplication. [\#2760](https://github.com/ClickHouse/ClickHouse/pull/2760) +- Ajout des fonctions `murmurHash2_64`, `murmurHash3_32`, `murmurHash3_64`, et `murmurHash3_128` en plus de l'existant `murmurHash2_32`. [\#2791](https://github.com/ClickHouse/ClickHouse/pull/2791) +- Prise en charge des types Nullable dans le pilote ODBC ClickHouse (`ODBCDriver2` le format de sortie). [\#2834](https://github.com/ClickHouse/ClickHouse/pull/2834) +- Soutien pour `UUID` dans les colonnes de clé. + +#### Amélioration: {#improvements-5} + +- Les Clusters peuvent être supprimés sans redémarrer le serveur lorsqu'ils sont supprimés des fichiers de configuration. [\#2777](https://github.com/ClickHouse/ClickHouse/pull/2777) +- Les dictionnaires externes peuvent être supprimés sans redémarrer le serveur lorsqu'ils sont supprimés des fichiers de configuration. [\#2779](https://github.com/ClickHouse/ClickHouse/pull/2779) +- Ajouter `SETTINGS` soutien pour le `Kafka` tableau moteur. [Alexander Marshalov](https://github.com/ClickHouse/ClickHouse/pull/2781) +- Des améliorations pour l' `UUID` type de données (pas encore terminée). [\#2618](https://github.com/ClickHouse/ClickHouse/pull/2618) +- Prise en charge des pièces vides après fusion dans le `SummingMergeTree`, `CollapsingMergeTree` et `VersionedCollapsingMergeTree` moteur. [\#2815](https://github.com/ClickHouse/ClickHouse/pull/2815) +- Les anciens enregistrements de mutations terminées sont supprimés (`ALTER DELETE`). [\#2784](https://github.com/ClickHouse/ClickHouse/pull/2784) +- Ajouté le `system.merge_tree_settings` table. [Kirill Shvakov](https://github.com/ClickHouse/ClickHouse/pull/2841) +- Le `system.tables` la table a maintenant des colonnes de dépendance: `dependencies_database` et `dependencies_table`. [L'Hiver Zhang](https://github.com/ClickHouse/ClickHouse/pull/2851) +- Ajouté le `max_partition_size_to_drop` option de configuration. [\#2782](https://github.com/ClickHouse/ClickHouse/pull/2782) +- Ajouté le `output_format_json_escape_forward_slashes` option. [Alexandre Botcharov](https://github.com/ClickHouse/ClickHouse/pull/2812) +- Ajouté le `max_fetch_partition_retries_count` paramètre. [\#2831](https://github.com/ClickHouse/ClickHouse/pull/2831) +- Ajouté le `prefer_localhost_replica` paramètre permettant de désactiver la préférence pour une réplique locale et d'accéder à une réplique locale sans interaction entre processus. [\#2832](https://github.com/ClickHouse/ClickHouse/pull/2832) +- Le `quantileExact` fonction d'agrégation retourne `nan` dans le cas de l'agrégation sur un vide `Float32` ou `Float64` définir. [Sundy Li](https://github.com/ClickHouse/ClickHouse/pull/2855) + +#### Corrections de bugs: {#bug-fixes-14} + +- Suppression de l'échappement inutile des paramètres de chaîne de connexion pour ODBC, ce qui rendait impossible l'établissement d'une connexion. Cette erreur s'est produite dans la version 18.6.0. +- Fixe la logique de traitement `REPLACE PARTITION` les commandes dans la file d'attente de réplication. Si il y a deux `REPLACE` pour la même partition, la logique incorrecte pourrait entraîner l'un d'entre eux de rester dans la file d'attente de réplication et ne pas être exécuté. [\#2814](https://github.com/ClickHouse/ClickHouse/pull/2814) +- Correction d'un bug de fusion lorsque toutes les parties de données étaient vides (parties formées à partir d'une fusion ou `ALTER DELETE` si toutes les données ont été supprimées). Ce bug est apparu dans la version 18.1.0. [\#2930](https://github.com/ClickHouse/ClickHouse/pull/2930) +- Correction d'une erreur pour simultanées `Set` ou `Join`. [Amos Oiseau](https://github.com/ClickHouse/ClickHouse/pull/2823) +- Correction de l' `Block structure mismatch in UNION stream: different number of columns` erreur qui s'est produite pour `UNION ALL` requêtes dans une sous-requête si l'un des `SELECT` les requêtes contiennent des noms de colonnes en double. [L'Hiver Zhang](https://github.com/ClickHouse/ClickHouse/pull/2094) +- Correction d'une fuite de mémoire si une exception se produisait lors de la connexion à un serveur MySQL. +- Correction d'un code de réponse clickhouse-client incorrect en cas d'erreur de requête. +- Correction d'un comportement incorrect des vues matérialisées contenant DISTINCT. [\#2795](https://github.com/ClickHouse/ClickHouse/issues/2795) + +#### Modifications incompatibles en arrière {#backward-incompatible-changes-4} + +- Suppression de la prise en charge des requêtes CHECK TABLE pour les tables distribuées. + +#### Construire des changements: {#build-changes-3} + +- L'allocateur a été remplacé: `jemalloc` est maintenant utilisé à la place de `tcmalloc`. Dans certains scénarios, cela augmente la vitesse jusqu'à 20%. Cependant, il y a des questions qui ont ralenti jusqu'à 20%. La consommation de mémoire a été réduite d'environ 10% dans certains scénarios, avec une meilleure stabilité. Avec des charges très compétitives, l'utilisation du processeur dans l'espace utilisateur et dans le système ne montre qu'une légère augmentation. [\#2773](https://github.com/ClickHouse/ClickHouse/pull/2773) +- L'utilisation de libressl à partir d'un sous-module. [\#1983](https://github.com/ClickHouse/ClickHouse/pull/1983) [\#2807](https://github.com/ClickHouse/ClickHouse/pull/2807) +- Utilisation d'unixodbc à partir d'un sous-module. [\#2789](https://github.com/ClickHouse/ClickHouse/pull/2789) +- L'utilisation de mariadb-connecteur-c à partir d'un sous-module. [\#2785](https://github.com/ClickHouse/ClickHouse/pull/2785) +- Ajout de fichiers de test fonctionnels au référentiel qui dépendent de la disponibilité des données de test (pour le moment, sans les données de test elles-mêmes). + +## Clickhouse version 18.6 {#clickhouse-release-18-6} + +### Clickhouse version 18.6.0, 2018-08-02 {#clickhouse-release-18-6-0-2018-08-02} + +#### Nouveauté: {#new-features-6} + +- Ajout du support pour les expressions on pour la syntaxe JOIN ON: + `JOIN ON Expr([table.]column ...) = Expr([table.]column, ...) [AND Expr([table.]column, ...) = Expr([table.]column, ...) ...]` + L'expression doit être une chaîne d'égalités rejoint par l'opérateur ET. De chaque côté de l'égalité peut être une expression arbitraire sur les colonnes de l'une des tables. L'utilisation de noms de colonnes entièrement qualifiés est prise en charge (`table.name`, `database.table.name`, `table_alias.name`, `subquery_alias.name`) pour la bonne table. [\#2742](https://github.com/ClickHouse/ClickHouse/pull/2742) +- HTTPS peut être activé pour la réplication. [\#2760](https://github.com/ClickHouse/ClickHouse/pull/2760) + +#### Amélioration: {#improvements-6} + +- Le serveur transmet le composant patch de sa version au client. Les données sur le composant de version de correctif sont `system.processes` et `query_log`. [\#2646](https://github.com/ClickHouse/ClickHouse/pull/2646) + +## Clickhouse version 18.5 {#clickhouse-release-18-5} + +### Clickhouse version 18.5.1, 2018-07-31 {#clickhouse-release-18-5-1-2018-07-31} + +#### Nouveauté: {#new-features-7} + +- Ajout de la fonction de hachage `murmurHash2_32` [\#2756](https://github.com/ClickHouse/ClickHouse/pull/2756). + +#### Amélioration: {#improvements-7} + +- Maintenant, vous pouvez utiliser le `from_env` [\#2741](https://github.com/ClickHouse/ClickHouse/pull/2741) attribut pour définir des valeurs dans les fichiers de configuration à partir de variables d'environnement. +- Ajout de versions insensibles à la casse `coalesce`, `ifNull`, et `nullIf functions` [\#2752](https://github.com/ClickHouse/ClickHouse/pull/2752). + +#### Corrections de bugs: {#bug-fixes-15} + +- Correction d'un bug possible lors du démarrage d'une réplique [\#2759](https://github.com/ClickHouse/ClickHouse/pull/2759). + +## Clickhouse version 18.4 {#clickhouse-release-18-4} + +### Clickhouse version 18.4.0, 2018-07-28 {#clickhouse-release-18-4-0-2018-07-28} + +#### Nouveauté: {#new-features-8} + +- Tables système ajoutées: `formats`, `data_type_families`, `aggregate_function_combinators`, `table_functions`, `table_engines`, `collations` [\#2721](https://github.com/ClickHouse/ClickHouse/pull/2721). +- Ajout de la possibilité d'utiliser une fonction de table au lieu d'un tableau en argument d'une `remote` ou `cluster table function` [\#2708](https://github.com/ClickHouse/ClickHouse/pull/2708). +- Soutien pour `HTTP Basic` l'authentification dans le protocole de réplication [\#2727](https://github.com/ClickHouse/ClickHouse/pull/2727). +- Le `has` fonction permet de rechercher une valeur numérique dans un tableau de `Enum` valeur [Maxim Khrisanfov](https://github.com/ClickHouse/ClickHouse/pull/2699). +- Prise en charge de l'ajout de séparateurs de messages arbitraires lors de la lecture de `Kafka` [Amos Oiseau](https://github.com/ClickHouse/ClickHouse/pull/2701). + +#### Amélioration: {#improvements-8} + +- Le `ALTER TABLE t DELETE WHERE` la requête ne réécrit pas les parties de données qui n'ont pas été affectées par la condition WHERE [\#2694](https://github.com/ClickHouse/ClickHouse/pull/2694). +- Le `use_minimalistic_checksums_in_zookeeper` option pour `ReplicatedMergeTree` des tables est activé par défaut. Ce paramètre a été ajouté dans la version 1.1.54378, 2018-04-16. Les Versions antérieures à 1.1.54378 ne peuvent plus être installées. +- La prise en charge de `KILL` et `OPTIMIZE` requêtes qui spécifient `ON CLUSTER` [L'Hiver Zhang](https://github.com/ClickHouse/ClickHouse/pull/2689). + +#### Corrections de bugs: {#bug-fixes-16} + +- Correction de l'erreur `Column ... is not under an aggregate function and not in GROUP BY` pour l'agrégation avec une expression. Ce bug est apparu dans la version 18.1.0. ([bbdd780b](https://github.com/ClickHouse/ClickHouse/commit/bbdd780be0be06a0f336775941cdd536878dd2c2)) +- Correction d'un bug dans l' `windowFunnel aggregate function` [L'Hiver Zhang](https://github.com/ClickHouse/ClickHouse/pull/2735). +- Correction d'un bug dans l' `anyHeavy` fonction d'agrégation ([a2101df2](https://github.com/ClickHouse/ClickHouse/commit/a2101df25a6a0fba99aa71f8793d762af2b801ee)) +- Correction d'un crash du serveur lors de l'utilisation du `countArray()` fonction d'agrégation. + +#### Modifications incompatibles en arrière: {#backward-incompatible-changes-5} + +- Paramètres pour `Kafka` moteur a été changé de `Kafka(kafka_broker_list, kafka_topic_list, kafka_group_name, kafka_format[, kafka_schema, kafka_num_consumers])` de `Kafka(kafka_broker_list, kafka_topic_list, kafka_group_name, kafka_format[, kafka_row_delimiter, kafka_schema, kafka_num_consumers])`. Si vos tables utilisent `kafka_schema` ou `kafka_num_consumers` paramètres, vous devez modifier manuellement les fichiers de métadonnées `path/metadata/database/table.sql` et d'ajouter `kafka_row_delimiter` paramètre avec `''` valeur. + +## Clickhouse version 18.1 {#clickhouse-release-18-1} + +### Clickhouse version 18.1.0, 2018-07-23 {#clickhouse-release-18-1-0-2018-07-23} + +#### Nouveauté: {#new-features-9} + +- Soutien pour le `ALTER TABLE t DELETE WHERE` requête pour les tables MergeTree non répliquées ([\#2634](https://github.com/ClickHouse/ClickHouse/pull/2634)). +- Prise en charge des types arbitraires pour `uniq*` famille de fonctions agrégées ([\#2010](https://github.com/ClickHouse/ClickHouse/issues/2010)). +- Prise en charge des types arbitraires dans les opérateurs de comparaison ([\#2026](https://github.com/ClickHouse/ClickHouse/issues/2026)). +- Le `users.xml` fichier permet de définir un masque de sous-réseau au format `10.0.0.1/255.255.255.0`. Ceci est nécessaire pour utiliser des masques pour les réseaux IPv6 avec des zéros au milieu ([\#2637](https://github.com/ClickHouse/ClickHouse/pull/2637)). +- Ajouté le `arrayDistinct` fonction ([\#2670](https://github.com/ClickHouse/ClickHouse/pull/2670)). +- Le moteur SummingMergeTree peut maintenant fonctionner avec des colonnes de type AggregateFunction ([Constantin S. Pan](https://github.com/ClickHouse/ClickHouse/pull/2566)). + +#### Amélioration: {#improvements-9} + +- Modification du schéma de numérotation pour les versions de version. Maintenant, la première partie contient l'année de sortie (A. D., fuseau horaire de Moscou, moins 2000), la deuxième partie contient le nombre de changements majeurs (augmente pour la plupart des versions), et la troisième partie est la version patch. Les versions sont toujours rétrocompatibles, sauf indication contraire dans le changelog. +- Conversions plus rapides de nombres à virgule flottante en une chaîne ([Amos Oiseau](https://github.com/ClickHouse/ClickHouse/pull/2664)). +- Si certaines lignes ont été ignorées lors d'une insertion en raison d'erreurs d'analyse (ceci est possible avec `input_allow_errors_num` et `input_allow_errors_ratio` paramètres activé), le nombre de lignes ignorées est maintenant écrit dans le journal du serveur ([Leonardo Cecchi](https://github.com/ClickHouse/ClickHouse/pull/2669)). + +#### Corrections de bugs: {#bug-fixes-17} + +- Correction de la commande TRUNCATE pour les tables temporaires ([Amos Oiseau](https://github.com/ClickHouse/ClickHouse/pull/2624)). +- Correction d'une impasse rare dans la bibliothèque client ZooKeeper qui se produisait lorsqu'une erreur réseau se produisait lors de la lecture de la réponse ([c315200](https://github.com/ClickHouse/ClickHouse/commit/c315200e64b87e44bdf740707fc857d1fdf7e947)). +- Correction d'une erreur lors d'une conversion en types Nullable ([\#1322](https://github.com/ClickHouse/ClickHouse/issues/1322)). +- Correction du résultat incorrect de l' `maxIntersection()` fonction lorsque les limites des intervalles de coïncidé ([Michael Furmur](https://github.com/ClickHouse/ClickHouse/pull/2657)). +- Correction d'une transformation incorrecte de la chaîne d'expression OR dans un argument de fonction ([chenxing-xc](https://github.com/ClickHouse/ClickHouse/pull/2663)). +- Fixe une dégradation des performances pour les requêtes contenant `IN (subquery)` expressions à l'intérieur d'une autre sous-requête ([\#2571](https://github.com/ClickHouse/ClickHouse/issues/2571)). +- Fixe incompatibilité entre les serveurs avec des versions différentes requêtes distribuées qui utilisent un `CAST` fonction qui n'est pas en majuscules ([fe8c4d6](https://github.com/ClickHouse/ClickHouse/commit/fe8c4d64e434cacd4ceef34faa9005129f2190a5)). +- Ajout de guillemets manquants d'identifiants pour les requêtes à un SGBD externe ([\#2635](https://github.com/ClickHouse/ClickHouse/issues/2635)). + +#### Modifications incompatibles en arrière: {#backward-incompatible-changes-6} + +- La conversion d'une chaîne contenant le nombre zéro en DateTime ne fonctionne pas. Exemple: `SELECT toDateTime('0')`. C'est aussi la raison pour laquelle `DateTime DEFAULT '0'` ne fonctionne pas dans les tableaux, ainsi que `0` dans les dictionnaires. Solution: remplacer `0` avec `0000-00-00 00:00:00`. + +## Clickhouse version 1.1 {#clickhouse-release-1-1} + +### Clickhouse version 1.1.54394, 2018-07-12 {#clickhouse-release-1-1-54394-2018-07-12} + +#### Nouveauté: {#new-features-10} + +- Ajouté le `histogram` fonction d'agrégation ([Mikhail Surin](https://github.com/ClickHouse/ClickHouse/pull/2521)). +- Maintenant `OPTIMIZE TABLE ... FINAL` peut être utilisé sans spécifier de partitions pour `ReplicatedMergeTree` ([Amos Oiseau](https://github.com/ClickHouse/ClickHouse/pull/2600)). + +#### Corrections de bugs: {#bug-fixes-18} + +- Correction d'un problème avec un très petit délai d'attente pour les sockets (une seconde) pour la lecture et l'écriture lors de l'envoi et du téléchargement de données répliquées, ce qui rendait impossible le téléchargement de pièces plus grandes s'il y avait une charge sur le réseau ou le disque (cela entraînait des tentatives cycliques de téléchargement de pièces). Cette erreur s'est produite dans la version 1.1.54388. +- Correction de problèmes lors de l'utilisation de chroot dans ZooKeeper si vous avez inséré des blocs de données en double dans la table. +- Le `has` la fonction fonctionne maintenant correctement pour un tableau avec les valeurs null éléments ([\#2115](https://github.com/ClickHouse/ClickHouse/issues/2115)). +- Le `system.tables` table fonctionne maintenant correctement lorsqu'il est utilisé dans les requêtes distribuées. Le `metadata_modification_time` et `engine_full` les colonnes sont maintenant non-virtuel. Correction d'une erreur qui s'est produite si seules ces colonnes étaient interrogées à partir de la table. +- Correction de la façon dont un vide `TinyLog` table fonctionne après l'insertion d'un bloc de données vide ([\#2563](https://github.com/ClickHouse/ClickHouse/issues/2563)). +- Le `system.zookeeper` table fonctionne si la valeur du nœud dans ZooKeeper est NULL. + +### Clickhouse version 1.1.54390, 2018-07-06 {#clickhouse-release-1-1-54390-2018-07-06} + +#### Nouveauté: {#new-features-11} + +- Les requêtes peuvent être envoyées `multipart/form-data` format (dans le `query` champ), ce qui est utile si des données externes sont également envoyées pour le traitement de la requête ([Olga Hvostikova](https://github.com/ClickHouse/ClickHouse/pull/2490)). +- Ajout de la possibilité d'activer ou de désactiver le traitement des guillemets simples ou doubles lors de la lecture de données au format CSV. Vous pouvez configurer cela dans le `format_csv_allow_single_quotes` et `format_csv_allow_double_quotes` paramètre ([Amos Oiseau](https://github.com/ClickHouse/ClickHouse/pull/2574)). +- Maintenant `OPTIMIZE TABLE ... FINAL` peut être utilisé sans spécifier la partition pour les variantes non répliquées de `MergeTree` ([Amos Oiseau](https://github.com/ClickHouse/ClickHouse/pull/2599)). + +#### Amélioration: {#improvements-10} + +- Amélioration des performances, réduction de la consommation de mémoire et suivi correct de la consommation de mémoire avec l'utilisation de L'opérateur IN lorsqu'un index de table peut être utilisé ([\#2584](https://github.com/ClickHouse/ClickHouse/pull/2584)). +- Retiré redondant vérification des sommes de contrôle lors de l'ajout d'une partie des données. Ceci est important lorsqu'il y a un grand nombre de répliques, car dans ces cas, le nombre total de contrôles était égal à n^2. +- Ajout du support pour `Array(Tuple(...))` arguments en faveur de la `arrayEnumerateUniq` fonction ([\#2573](https://github.com/ClickHouse/ClickHouse/pull/2573)). +- Ajouter `Nullable` soutien pour le `runningDifference` fonction ([\#2594](https://github.com/ClickHouse/ClickHouse/pull/2594)). +- Amélioration des performances d'analyse des requêtes lorsqu'il existe un très grand nombre d'expressions ([\#2572](https://github.com/ClickHouse/ClickHouse/pull/2572)). +- Sélection plus rapide des parties de données à fusionner `ReplicatedMergeTree` table. Récupération plus rapide de la session ZooKeeper ([\#2597](https://github.com/ClickHouse/ClickHouse/pull/2597)). +- Le `format_version.txt` fichier pour `MergeTree` tables est recréée si elle est manquante, ce qui est logique si ClickHouse est lancé après avoir copié la structure de répertoire sans fichiers ([Ciprian Hacman](https://github.com/ClickHouse/ClickHouse/pull/2593)). + +#### Corrections de bugs: {#bug-fixes-19} + +- Correction d'un bug lorsque vous travaillez avec ZooKeeper qui pourrait rendre impossible la récupération de la session et des États en lecture seule des tables avant de redémarrer le serveur. +- Correction d'un bug lorsque vous travaillez avec ZooKeeper qui pourrait entraîner la suppression des anciens nœuds si la session est interrompue. +- Correction d'une erreur dans le `quantileTDigest` fonction pour les arguments Float (ce bug a été introduit dans la version 1.1.54388) ([Mikhail Surin](https://github.com/ClickHouse/ClickHouse/pull/2553)). +- Correction d'un bug dans l'index des tables MergeTree si la colonne de clé primaire est située à l'intérieur de la fonction de conversion des types entre des entiers signés et non signés de même taille ([\#2603](https://github.com/ClickHouse/ClickHouse/pull/2603)). +- Fixe erreur de segmentation si `macros` sont utilisés mais ils ne sont pas dans le fichier de configuration ([\#2570](https://github.com/ClickHouse/ClickHouse/pull/2570)). +- Correction du passage à la base de données par défaut lors de la reconnexion du client ([\#2583](https://github.com/ClickHouse/ClickHouse/pull/2583)). +- Correction d'un bug qui se produisait lors de la `use_index_for_in_with_subqueries` paramètre a été désactivé. + +#### Correction de sécurité: {#security-fix-1} + +- L'envoi de fichiers n'est plus possible lorsqu'il est connecté à MySQL (`LOAD DATA LOCAL INFILE`). + +### Clickhouse version 1.1.54388, 2018-06-28 {#clickhouse-release-1-1-54388-2018-06-28} + +#### Nouveauté: {#new-features-12} + +- Soutien pour le `ALTER TABLE t DELETE WHERE` requête pour les tables répliquées. Ajouté le `system.mutations` tableau pour suivre la progression de ce type de requêtes. +- Soutien pour le `ALTER TABLE t [REPLACE|ATTACH] PARTITION` requête pour les tables \* MergeTree. +- Soutien pour le `TRUNCATE TABLE` requête ([L'Hiver Zhang](https://github.com/ClickHouse/ClickHouse/pull/2260)) +- Plusieurs nouveaux `SYSTEM` requêtes pour les tables répliquées (`RESTART REPLICAS`, `SYNC REPLICA`, `[STOP|START] [MERGES|FETCHES|SENDS REPLICATED|REPLICATION QUEUES]`). +- Ajout de la possibilité d'écrire dans une table avec le moteur MySQL et la fonction de table correspondante ([sundy-li](https://github.com/ClickHouse/ClickHouse/pull/2294)). +- Ajouté le `url()` fonction de table et le `URL` tableau moteur ([Alexander Sapin](https://github.com/ClickHouse/ClickHouse/pull/2501)). +- Ajouté le `windowFunnel` fonction d'agrégation ([sundy-li](https://github.com/ClickHouse/ClickHouse/pull/2352)). +- Nouveau `startsWith` et `endsWith` fonctions pour les chaînes ([Vadim Plakhtinsky](https://github.com/ClickHouse/ClickHouse/pull/2429)). +- Le `numbers()` la fonction table vous permet maintenant de spécifier le décalage ([L'Hiver Zhang](https://github.com/ClickHouse/ClickHouse/pull/2535)). +- Le mot de passe pour `clickhouse-client` peut être saisi de manière interactive. +- Les journaux du serveur peuvent maintenant être envoyés à syslog ([Alexander Krasheninnikov](https://github.com/ClickHouse/ClickHouse/pull/2459)). +- Prise en charge de la connexion dans les dictionnaires avec une source de bibliothèque partagée ([Alexander Sapin](https://github.com/ClickHouse/ClickHouse/pull/2472)). +- Prise en charge des délimiteurs CSV personnalisés ([Ivan Joukov](https://github.com/ClickHouse/ClickHouse/pull/2263)) +- Ajouté le `date_time_input_format` paramètre. Si vous basculez ce paramètre sur `'best_effort'`, Les valeurs DateTime seront lues dans un large éventail de formats. +- Ajouté le `clickhouse-obfuscator` utilitaire pour l'obscurcissement des données. Exemple d'utilisation: publication des données utilisées dans les tests de performance. + +#### Caractéristiques expérimentales: {#experimental-features-2} + +- Ajout de la possibilité de calculer `and` arguments uniquement là où ils sont nécessaires ([Anastasia Tsarkova](https://github.com/ClickHouse/ClickHouse/pull/2272)) +- La compilation JIT en code natif est maintenant disponible pour certaines expressions ([pyos](https://github.com/ClickHouse/ClickHouse/pull/2277)). + +#### Corrections de bugs: {#bug-fixes-20} + +- Les doublons n'apparaissent plus pour une requête avec `DISTINCT` et `ORDER BY`. +- Les requêtes avec `ARRAY JOIN` et `arrayFilter` ne renvoie plus un résultat incorrect. +- Correction d'une erreur lors de la lecture d'une colonne de tableau à partir d'une structure Imbriquée ([\#2066](https://github.com/ClickHouse/ClickHouse/issues/2066)). +- Correction d'une erreur lors de l'analyse des requêtes avec une clause HAVING comme `HAVING tuple IN (...)`. +- Correction d'une erreur lors de l'analyse des requêtes avec récursive des alias. +- Correction d'une erreur lors de la lecture de ReplacingMergeTree avec une condition dans PREWHERE qui filtre Toutes les lignes ([\#2525](https://github.com/ClickHouse/ClickHouse/issues/2525)). +- Les paramètres de profil utilisateur n'ont pas été appliqués lors de l'utilisation de sessions dans L'interface HTTP. +- Correction de la façon dont les paramètres sont appliqués à partir des paramètres de ligne de commande dans clickhouse-local. +- La bibliothèque client ZooKeeper utilise maintenant le délai d'attente de session reçu du serveur. +- Correction d'un bug dans la bibliothèque client ZooKeeper lorsque le client attendait la réponse du serveur plus longtemps que le délai d'attente. +- Correction de l'élagage des pièces pour les requêtes avec des conditions sur les colonnes de clé de partition ([\#2342](https://github.com/ClickHouse/ClickHouse/issues/2342)). +- Les fusions sont maintenant possibles après `CLEAR COLUMN IN PARTITION` ([\#2315](https://github.com/ClickHouse/ClickHouse/issues/2315)). +- Le mappage de Type dans la fonction de table ODBC a été corrigé ([sundy-li](https://github.com/ClickHouse/ClickHouse/pull/2268)). +- Les comparaisons de Type ont été corrigées pour `DateTime` avec et sans le fuseau horaire ([Alexandre Botcharov](https://github.com/ClickHouse/ClickHouse/pull/2400)). +- Correction de l'analyse syntaxique et du formatage `CAST` opérateur. +- Insertion fixe dans une vue matérialisée pour le moteur de table distribué ([Babacar Diassé](https://github.com/ClickHouse/ClickHouse/pull/2411)). +- Correction d'une condition de concurrence lors de l'écriture de données `Kafka` moteur aux vues matérialisées ([Yangkuan Liu](https://github.com/ClickHouse/ClickHouse/pull/2448)). +- Correction de SSRF dans la fonction de table remote (). +- Comportement de sortie fixe de `clickhouse-client` en mode multi-lignes ([\#2510](https://github.com/ClickHouse/ClickHouse/issues/2510)). + +#### Amélioration: {#improvements-11} + +- Les tâches d'arrière plan dans les tables répliquées sont maintenant effectuées dans un pool de threads plutôt que dans des threads séparés ([Silviu Caragea](https://github.com/ClickHouse/ClickHouse/pull/1722)). +- Amélioration des performances de compression LZ4. +- Analyse plus rapide pour les requêtes avec un grand nombre de jointures et de sous-requêtes. +- Le cache DNS est maintenant mis à jour automatiquement lorsqu'il y a trop d'erreurs réseau. +- Les insertions de Table ne se produisent plus si l'insertion dans l'une des vues matérialisées n'est pas possible car elle comporte trop de parties. +- Correction de l'écart dans les compteurs d'événements `Query`, `SelectQuery`, et `InsertQuery`. +- Des Expressions comme `tuple IN (SELECT tuple)` sont autorisés si les types de tuple correspondent. +- Un serveur avec des tables répliquées peut démarrer même si vous n'avez pas configuré ZooKeeper. +- Lors du calcul du nombre de cœurs CPU disponibles, les limites sur les groupes cgroups sont maintenant prises en compte ([Atri Sharma](https://github.com/ClickHouse/ClickHouse/pull/2325)). +- Ajouté chown pour les répertoires de configuration dans le fichier de configuration systemd ([Mikhaïl Shirjaeva](https://github.com/ClickHouse/ClickHouse/pull/2421)). + +#### Construire des changements: {#build-changes-4} + +- Le compilateur gcc8 peut être utilisé pour les builds. +- Ajout de la possibilité de construire llvm à partir du sous-module. +- La version de la bibliothèque librdkafka a été mise à jour vers v0. 11. 4. +- Ajout de la possibilité d'utiliser la bibliothèque libcpuid du système. La version de la bibliothèque a été mise à jour à 0.4.0. +- Correction de la construction en utilisant la bibliothèque vectorclass ([Babacar Diassé](https://github.com/ClickHouse/ClickHouse/pull/2274)). +- Cmake génère maintenant des fichiers pour ninja par défaut (comme lors de l'utilisation `-G Ninja`). +- Ajout de la possibilité d'utiliser la bibliothèque libtinfo au lieu de libtermcap ([Georgy Kondratiev](https://github.com/ClickHouse/ClickHouse/pull/2519)). +- Correction d'un conflit de fichier d'en-tête dans Fedora Rawhide ([\#2520](https://github.com/ClickHouse/ClickHouse/issues/2520)). + +#### Modifications incompatibles en arrière: {#backward-incompatible-changes-7} + +- Retiré échapper dans `Vertical` et `Pretty*` formats et supprimé le `VerticalRaw` format. +- Si des serveurs avec la version 1.1.54388 (ou plus récente) et des serveurs avec une version plus ancienne sont utilisés simultanément dans une requête distribuée et la requête a le `cast(x, 'Type')` expression sans `AS` mot clé et n'a pas le mot `cast` en majuscules, une exception sera levée avec un message du genre `Not found column cast(0, 'UInt8') in block`. Solution: mettez à jour le serveur sur l'ensemble du cluster. + +### Clickhouse version 1.1.54385, 2018-06-01 {#clickhouse-release-1-1-54385-2018-06-01} + +#### Corrections de bugs: {#bug-fixes-21} + +- Correction d'une erreur qui, dans certains cas, provoquait le blocage des opérations de ZooKeeper. + +### Clickhouse version 1.1.54383, 2018-05-22 {#clickhouse-release-1-1-54383-2018-05-22} + +#### Corrections de bugs: {#bug-fixes-22} + +- Correction d'un ralentissement de la file d'attente de réplication si une table a plusieurs répliques. + +### Clickhouse version 1.1.54381, 2018-05-14 {#clickhouse-release-1-1-54381-2018-05-14} + +#### Corrections de bugs: {#bug-fixes-23} + +- Correction d'une fuite de nœuds dans ZooKeeper lorsque ClickHouse perd la connexion au serveur ZooKeeper. + +### Clickhouse version 1.1.54380, 2018-04-21 {#clickhouse-release-1-1-54380-2018-04-21} + +#### Nouveauté: {#new-features-13} + +- Ajout de la fonction table `file(path, format, structure)`. Un exemple de lecture d'octets depuis `/dev/urandom`: ``` ln -s /dev/urandom /var/lib/clickhouse/user_files/random``clickhouse-client -q "SELECT * FROM file('random', 'RowBinary', 'd UInt8') LIMIT 10" ```. + +#### Amélioration: {#improvements-12} + +- Les sous-requêtes peuvent être encapsulées `()` crochets pour améliorer la lisibilité des requêtes. Exemple: `(SELECT 1) UNION ALL (SELECT 1)`. +- Simple `SELECT` les requêtes de l' `system.processes` le tableau ne sont pas inclus dans le `max_concurrent_queries` limite. + +#### Corrections de bugs: {#bug-fixes-24} + +- Correction d'un comportement incorrect de la `IN` opérateur quand sélectionner à partir de `MATERIALIZED VIEW`. +- Correction d'un filtrage incorrect par index de partition dans des expressions comme `partition_key_column IN (...)`. +- Incapacité fixe à exécuter `OPTIMIZE` requête sur réplica non leader si `REANAME` a été effectuée sur la table. +- Correction de l'erreur d'autorisation lors de l'exécution `OPTIMIZE` ou `ALTER` requêtes sur une réplique non-leader. +- Fixe le gel de l' `KILL QUERY`. +- Correction d'une erreur dans la bibliothèque client ZooKeeper qui a conduit à la perte de montres, le gel de la file d'attente DDL distribuée, et des ralentissements dans la file d'attente de réplication si un non vide `chroot` le préfixe est utilisé dans la configuration de ZooKeeper. + +#### Modifications incompatibles en arrière: {#backward-incompatible-changes-8} + +- Suppression du support pour les expressions comme `(a, b) IN (SELECT (a, b))` (vous pouvez utiliser l'expression équivalente `(a, b) IN (SELECT a, b)`). Dans les versions précédentes, ces expressions ont conduit à indéterminé `WHERE` filtrage ou causé des erreurs. + +### Clickhouse version 1.1.54378, 2018-04-16 {#clickhouse-release-1-1-54378-2018-04-16} + +#### Nouveauté: {#new-features-14} + +- Niveau d'enregistrement peut être modifié sans redémarrer le serveur. +- Ajouté le `SHOW CREATE DATABASE` requête. +- Le `query_id` peut être passé à `clickhouse-client` (elBroom). +- Nouveau paramètre: `max_network_bandwidth_for_all_users`. +- Ajout du support pour `ALTER TABLE ... PARTITION ...` pour `MATERIALIZED VIEW`. +- Ajout d'informations sur la taille des parties de données sous forme non compressée dans la table système. +- Prise en charge du chiffrement de serveur à serveur pour les tables distribuées (`1` dans la configuration de la réplique ``). +- Configuration du niveau de la table pour `ReplicatedMergeTree` la famille afin de minimiser la quantité de données stockées dans Zookeeper: : `use_minimalistic_checksums_in_zookeeper = 1` +- Configuration de l' `clickhouse-client` invite. Par défaut, les noms de serveur sont maintenant affichés à l'invite. Le nom d'affichage du serveur peut être modifié. Il est également envoyé dans le `X-ClickHouse-Display-Name` En-tête HTTP (Kirill Shvakov). +- Séparés par des virgules multiples `topics` peut être spécifié pour l' `Kafka` moteur (Tobias Adamson) +- Quand une requête est arrêtée par `KILL QUERY` ou `replace_running_query` le client reçoit l' `Query was canceled` exception au lieu d'un résultat incomplète. + +#### Amélioration: {#improvements-13} + +- `ALTER TABLE ... DROP/DETACH PARTITION` les requêtes sont exécutées à l'avant de la file d'attente de réplication. +- `SELECT ... FINAL` et `OPTIMIZE ... FINAL` peut être utilisé même lorsque la table a une seule partie de données. +- A `query_log` la table est recréée à la volée si elle a été supprimée manuellement (Kirill Shvakov). +- Le `lengthUTF8` fonction fonctionne plus rapidement (zhang2014). +- Amélioration des performances des inserts synchrones dans `Distributed` table (`insert_distributed_sync = 1` lorsqu'il existe un très grand nombre de fragments. +- Le serveur accepte le `send_timeout` et `receive_timeout` les paramètres du client et les applique lors de la connexion au client (ils sont appliqués dans l'ordre inverse: le socket du serveur `send_timeout` est définie à l' `receive_timeout` valeur reçue du client, et vice versa). +- Récupération de crash plus robuste pour une insertion asynchrone dans `Distributed` table. +- Le type de retour de la `countEqual` la fonction a changé à partir de `UInt32` de `UInt64` (谢磊). + +#### Corrections de bugs: {#bug-fixes-25} + +- Correction d'une erreur avec `IN` lorsque le côté gauche de l'expression est `Nullable`. +- Les résultats corrects sont maintenant retournés lors de l'utilisation de tuples avec `IN` lorsque certains des composants tuple sont dans l'index de la table. +- Le `max_execution_time` limite fonctionne désormais correctement avec les requêtes distribuées. +- Correction d'erreurs lors du calcul de la taille des colonnes composites `system.columns` table. +- Correction d'une erreur lors de la création d'une table temporaire `CREATE TEMPORARY TABLE IF NOT EXISTS.` +- Erreurs corrigées dans `StorageKafka` (\#\#2075) +- Le serveur fixe se bloque à partir d'arguments non valides de certaines fonctions d'agrégat. +- Correction de l'erreur qui a empêché l' `DETACH DATABASE` requête de l'arrêt des tâches d'arrière-plan pour `ReplicatedMergeTree` table. +- `Too many parts` l'état est moins susceptible de se produire lors de l'insertion dans agrégées des vues matérialisées (\#\#2084). +- Correction de la gestion récursive des substitutions dans la configuration si une substitution doit être suivie d'une autre substitution au même niveau. +- Correction de la syntaxe dans le fichier de métadonnées lors de la création d'un `VIEW` qui utilise une requête avec `UNION ALL`. +- `SummingMergeTree` fonctionne maintenant correctement pour la sommation des structures de données imbriquées avec une clé composite. +- Correction de la possibilité d'une condition de course lors du choix du leader pour `ReplicatedMergeTree` table. + +#### Construire des changements: {#build-changes-5} + +- La construction prend en charge `ninja` plutôt `make` et utilise `ninja` par défaut pour les versions de construction. +- Paquets renommés: `clickhouse-server-base` dans `clickhouse-common-static`; `clickhouse-server-common` dans `clickhouse-server`; `clickhouse-common-dbg` dans `clickhouse-common-static-dbg`. Pour installer, utilisez `clickhouse-server clickhouse-client`. Les paquets avec les anciens noms seront toujours chargés dans les dépôts pour une compatibilité descendante. + +#### Modifications incompatibles en arrière: {#backward-incompatible-changes-9} + +- Retiré de l'interprétation d'une expression si un tableau est spécifié sur le côté gauche. Auparavant, l'expression `arr IN (set)` a été interprété comme “at least one `arr` element belongs to the `set`”. Pour obtenir le même comportement dans la nouvelle version, écrire `arrayExists(x -> x IN (set), arr)`. +- Désactivé l'utilisation incorrecte de l'option socket `SO_REUSEPORT`, qui a été incorrectement activé par défaut dans la bibliothèque Poco. Notez que sous Linux il n'y a plus aucune raison de spécifier simultanément les adresses `::` et `0.0.0.0` for listen – use just `::`, qui permet d'écouter la connexion à la fois sur IPv4 et IPv6 (avec les paramètres de configuration du noyau par défaut). Vous pouvez également revenir au comportement des versions précédentes en spécifiant `1` dans la config. + +### Clickhouse version 1.1.54370, 2018-03-16 {#clickhouse-release-1-1-54370-2018-03-16} + +#### Nouveauté: {#new-features-15} + +- Ajouté le `system.macros` table et mise à jour automatique des macros lorsque le fichier de configuration est modifié. +- Ajouté le `SYSTEM RELOAD CONFIG` requête. +- Ajouté le `maxIntersections(left_col, right_col)` fonction d'agrégation, qui retourne le nombre maximal d'simultanément intersection d'intervalles `[left; right]`. Le `maxIntersectionsPosition(left, right)` fonction retourne le début de la “maximum” intervalle. ([Michael Furmur](https://github.com/ClickHouse/ClickHouse/pull/2012)). + +#### Amélioration: {#improvements-14} + +- Lors de l'insertion de données dans une `Replicated` tableau, moins de demandes sont faites à `ZooKeeper` (et la plupart des erreurs au niveau de l'utilisateur ont disparu de la `ZooKeeper` journal). +- Ajout de la possibilité de créer des alias pour les ensembles de données. Exemple: `WITH (1, 2, 3) AS set SELECT number IN set FROM system.numbers LIMIT 10`. + +#### Corrections de bugs: {#bug-fixes-26} + +- Correction de l' `Illegal PREWHERE` erreur lors de la lecture des tables de fusion pour `Distributed`table. +- Ajout de correctifs qui vous permettent de démarrer clickhouse-server dans des conteneurs Docker IPv4 uniquement. +- Correction d'une condition de course lors de la lecture du système `system.parts_columns tables.` +- Suppression de la double mise en mémoire tampon lors d'un insert synchrone `Distributed` table, ce qui aurait pu provoquer la connexion à timeout. +- Correction d'un bug qui a causé des attentes trop longues pour une réplique indisponible avant de commencer un `SELECT` requête. +- Correction de dates incorrectes dans le `system.parts` table. +- Correction d'un bug qui rendait impossible l'insertion de données dans un `Replicated` le tableau si `chroot` était non vide dans la configuration du `ZooKeeper` cluster. +- Correction de l'algorithme de fusion verticale pour un `ORDER BY` table. +- Restauré la possibilité d'utiliser des dictionnaires dans les requêtes aux tables distantes, même si ces dictionnaires ne sont pas présents sur le serveur demandeur. Cette fonctionnalité a été perdue dans la version 1.1.54362. +- Restauré le comportement pour les requêtes comme `SELECT * FROM remote('server2', default.table) WHERE col IN (SELECT col2 FROM default.table)` lorsque le côté droit de la `IN` devrait utiliser une télécommande `default.table` au lieu d'un local. Ce comportement a été rompu dans la version 1.1.54358. +- Suppression de la journalisation au niveau des erreurs `Not found column ... in block`. + +### Clickhouse Version 1.1.54362, 2018-03-11 {#clickhouse-release-1-1-54362-2018-03-11} + +#### Nouveauté: {#new-features-16} + +- Agrégation sans `GROUP BY` pour un ensemble vide (comme `SELECT count(*) FROM table WHERE 0`) renvoie maintenant un résultat avec une ligne avec des valeurs null pour les fonctions d'agrégation, conformément à la norme SQL. Pour restaurer l'ancien comportement (renvoyer un résultat vide), définissez `empty_result_for_aggregation_by_empty_set` 1. +- Conversion de type ajouté pour `UNION ALL`. Différents noms d'alias sont autorisés dans `SELECT` les positions dans `UNION ALL` en conformité avec le standard SQL. +- Les expressions arbitraires sont prises en charge dans `LIMIT BY` clause. Auparavant, il était seulement possible d'utiliser des colonnes résultant de `SELECT`. +- Un indice de `MergeTree` tables est utilisé lorsque `IN` est appliqué à un n-uplet d'expressions à partir des colonnes de la clé primaire. Exemple: `WHERE (UserID, EventDate) IN ((123, '2000-01-01'), ...)` (Anastasiya Tsarkova). +- Ajouté le `clickhouse-copier` outil pour copier entre les clusters et remodeler les données (beta). +- Ajout de fonctions de hachage cohérentes: `yandexConsistentHash`, `jumpConsistentHash`, `sumburConsistentHash`. Ils peuvent être utilisés comme une clé de sharding afin de réduire la quantité de trafic réseau lors de remaniements ultérieurs. +- L'ajout de fonctions: `arrayAny`, `arrayAll`, `hasAny`, `hasAll`, `arrayIntersect`, `arrayResize`. +- Ajouté le `arrayCumSum` fonction (Javi Santana). +- Ajouté le `parseDateTimeBestEffort`, `parseDateTimeBestEffortOrZero`, et `parseDateTimeBestEffortOrNull` fonctions pour lire le DateTime à partir d'une chaîne contenant du texte dans une grande variété de formats possibles. +- Les données peuvent être partiellement rechargées à partir de dictionnaires externes lors de la mise à jour (charger uniquement les enregistrements dans lesquels la valeur du champ spécifié supérieure à celle du téléchargement précédent) (Arsen Hakobyan). +- Ajouté le `cluster` table de fonction. Exemple: `cluster(cluster_name, db, table)`. Le `remote` la fonction table peut accepter le nom du cluster comme premier argument, s'il est spécifié comme identifiant. +- Le `remote` et `cluster` les fonctions de table peuvent être utilisées dans `INSERT` requête. +- Ajouté le `create_table_query` et `engine_full` colonnes virtuelles au `system.tables`table . Le `metadata_modification_time` la colonne est virtuel. +- Ajouté le `data_path` et `metadata_path` les colonnes à `system.tables`et`system.databases` tables, et a ajouté le `path` la colonne de la `system.parts` et `system.parts_columns` table. +- Ajout d'informations supplémentaires sur les fusions `system.part_log` table. +- Une clé de partitionnement arbitraire peut être utilisée pour `system.query_log` table (Kirill Shvakov). +- Le `SHOW TABLES` query affiche maintenant également des tables temporaires. Ajout de tables temporaires et `is_temporary` colonne de `system.tables` (zhang2014). +- Ajouter `DROP TEMPORARY TABLE` et `EXISTS TEMPORARY TABLE` les requêtes (zhang2014). +- Soutien pour `SHOW CREATE TABLE` pour les tables temporaires (zhang2014). +- Ajouté le `system_profile` paramètre de configuration pour les paramètres utilisés par les processus internes. +- Soutien pour le chargement `object_id` comme un attribut de `MongoDB` dictionnaires (Pavel Litvinenko). +- Lecture `null` comme valeur par défaut lors du chargement de données pour un dictionnaire externe `MongoDB` source (Pavel Litvinenko). +- Lecture `DateTime` les valeurs dans la `Values` formater à partir D'un horodatage Unix sans guillemets simples. +- Le basculement est pris en charge dans `remote` fonctions de table pour les cas où certaines répliques manquent la table demandée. +- Les paramètres de Configuration peuvent être remplacées dans la ligne de commande lorsque vous exécutez `clickhouse-server`. Exemple: `clickhouse-server -- --logger.level=information`. +- Mise en œuvre de la `empty` fonction à partir d'un `FixedString` argument: la fonction renvoie 1 si la chaîne est entièrement composée d'octets nuls (zhang2014). +- Ajouté le `listen_try`paramètre de configuration pour l'écoute d'au moins une des adresses listen sans quitter, si certaines adresses ne peuvent pas être écoutées (utile pour les systèmes avec prise en charge désactivée pour IPv4 ou IPv6). +- Ajouté le `VersionedCollapsingMergeTree` tableau moteur. +- Prise en charge des lignes et des types numériques arbitraires `library` source du dictionnaire. +- `MergeTree` les tableaux peuvent être utilisés sans une clé primaire (vous devez spécifier `ORDER BY tuple()`). +- A `Nullable` peut être de type `CAST` pour un non-`Nullable` type si l'argument n'est pas `NULL`. +- `RENAME TABLE` peut être effectuée pour `VIEW`. +- Ajouté le `throwIf` fonction. +- Ajouté le `odbc_default_field_size` option, qui vous permet d'étendre la taille maximale de la valeur chargée à partir D'une source ODBC (par défaut, il est 1024). +- Le `system.processes` table et `SHOW PROCESSLIST` ont maintenant la `is_cancelled` et `peak_memory_usage` colonne. + +#### Amélioration: {#improvements-15} + +- Les limites et quotas sur le résultat ne sont plus appliqués aux données intermédiaires pour `INSERT SELECT` les requêtes ou pour `SELECT` les sous-requêtes. +- Moins de faux déclencheurs de `force_restore_data` lors de la vérification de l'état de `Replicated` les tables lorsque le serveur démarre. +- Ajouté le `allow_distributed_ddl` option. +- Les fonctions non déterministes ne sont pas autorisées dans les expressions `MergeTree` table de clés. +- Fichiers avec des substitutions de `config.d` les répertoires sont chargés par ordre alphabétique. +- Amélioration de la performance de l' `arrayElement` fonction dans le cas d'une constante tableau multidimensionnel avec un tableau vide comme l'un des éléments. Exemple: `[[1], []][x]`. +- Le serveur démarre plus rapidement maintenant lors de l'utilisation de fichiers de configuration avec de très grandes substitutions (par exemple, de très grandes listes de réseaux IP). +- Lors de l'exécution d'une requête, les fonctions de valeur de table s'exécutent une fois. Précédemment, `remote` et `mysql` les fonctions à valeur de table ont effectué la même requête deux fois pour récupérer la structure de la table à partir d'un serveur distant. +- Le `MkDocs` générateur de documentation est utilisé. +- Lorsque vous essayez de supprimer une colonne de table `DEFAULT`/`MATERIALIZED` les expressions des autres colonnes dépendent, une exception est levée (zhang2014). +- Ajout de la possibilité d'analyser une ligne vide dans des formats de texte comme le nombre 0 pour `Float` types de données. Cette fonctionnalité était auparavant disponible mais a été perdue dans la version 1.1.54342. +- `Enum` les valeurs peuvent être utilisés dans `min`, `max`, `sum` et quelques autres fonctions. Dans ces cas, il utilise des valeurs numériques correspondantes. Cette fonctionnalité était auparavant disponible mais a été perdue dans la version 1.1.54337. +- Ajouter `max_expanded_ast_elements` pour limiter la taille de L'AST après l'expansion récursive des alias. + +#### Corrections de bugs: {#bug-fixes-27} + +- Correction de cas où des colonnes inutiles ont été supprimées des sous-requêtes par erreur, ou non supprimées des sous-requêtes contenant `UNION ALL`. +- Correction d'un bug dans les fusions pour `ReplacingMergeTree` table. +- Insertions synchrones fixes dans `Distributed` table (`insert_distributed_sync = 1`). +- Fixe erreur de segmentation pour certaines utilisations de `FULL` et `RIGHT JOIN` avec des colonnes en double dans les sous-requêtes. +- Fixe erreur de segmentation pour certaines utilisations de `replace_running_query` et `KILL QUERY`. +- Fixe l'ordre du `source` et `last_exception` les colonnes dans l' `system.dictionaries` table. +- Correction d'un bug lors de l' `DROP DATABASE` la requête n'a pas supprimé le fichier contenant des métadonnées. +- Correction de l' `DROP DATABASE` requête pour `Dictionary` les bases de données. +- Fixe la faible précision de `uniqHLL12` et `uniqCombined` fonctions pour les cardinalités supérieures à 100 millions d'articles (Alex Bocharov). +- Correction du calcul des valeurs par défaut implicites si nécessaire pour calculer simultanément des expressions explicites par défaut dans `INSERT` les requêtes (zhang2014). +- Correction d'un cas rare lorsqu'une requête à un `MergeTree` la table n'a pas pu finir (chenxing-xc). +- Correction d'un plantage survenu lors de l'exécution d'un `CHECK` requête pour `Distributed` tables si tous les fragments sont locaux (chenxing.xc). +- Correction d'une légère régression des performances avec des fonctions qui utilisent des expressions régulières. +- Correction d'une régression de performance lors de la création de tableaux multidimensionnels à partir d'expressions complexes. +- Correction d'un bug qui pourrait causer un supplément `FORMAT` article à paraître dans un `.sql` fichier de métadonnées. +- Correction d'un bug qui a causé la `max_table_size_to_drop` limite à appliquer lorsque vous essayez de supprimer un `MATERIALIZED VIEW` en regardant une table explicitement spécifiée. +- Correction de l'incompatibilité avec les anciens clients (les anciens clients étaient parfois envoyés `DateTime('timezone')` type, dont ils ne comprennent pas). +- Correction d'un bug lors de la lecture `Nested` éléments de colonne de structures qui ont été ajoutés en utilisant `ALTER` mais qui sont vides pour les anciennes partitions, lorsque les conditions de ces colonnes a déménagé à `PREWHERE`. +- Correction d'un bug lors du filtrage des tables virtuelles `_table` colonnes dans les requêtes à `Merge` table. +- Correction d'un bug lors de l'utilisation `ALIAS` les colonnes en `Distributed` table. +- Correction d'un bug qui rendait la compilation dynamique impossible pour les requêtes avec des fonctions `quantile` famille. +- Correction d'une condition de concurrence dans le pipeline d'exécution de requête qui s'est produite dans de très rares cas lors de l'utilisation `Merge` avec un grand nombre de tables, et lors de l'utilisation `GLOBAL` les sous-requêtes. +- Correction d'un crash lors du passage de tableaux de tailles différentes pour un `arrayReduce` fonction lors de l'utilisation de fonctions d'agrégation à partir de plusieurs arguments. +- Interdit l'utilisation de requêtes avec `UNION ALL` dans un `MATERIALIZED VIEW`. +- Correction d'une erreur lors de l'initialisation du `part_log` table système au démarrage du serveur (par défaut, `part_log` est désactivée). + +#### Modifications incompatibles en arrière: {#backward-incompatible-changes-10} + +- Enlevé le `distributed_ddl_allow_replicated_alter` option. Ce comportement est activé par défaut. +- Enlevé le `strict_insert_defaults` paramètre. Si vous utilisez cette fonctionnalité, écrivez à `clickhouse-feedback@yandex-team.com`. +- Enlevé le `UnsortedMergeTree` moteur. + +### Clickhouse Version 1.1.54343, 2018-02-05 {#clickhouse-release-1-1-54343-2018-02-05} + +- Ajout de la prise en charge des macros pour définir les noms de cluster dans les requêtes DDL distribuées et les constructeurs de tables distribuées: `CREATE TABLE distr ON CLUSTER '{cluster}' (...) ENGINE = Distributed('{cluster}', 'db', 'table')`. +- Maintenant requêtes comme `SELECT ... FROM table WHERE expr IN (subquery)` sont traitées à l'aide de la `table` index. +- Amélioration du traitement des doublons lors de l'insertion dans des tables répliquées, de sorte qu'ils ne ralentissent plus l'exécution de la file d'attente de réplication. + +### Clickhouse Version 1.1.54342, 2018-01-22 {#clickhouse-release-1-1-54342-2018-01-22} + +Cette version contient des corrections de bugs pour la version précédente 1.1.54337: + +- Correction d'une régression dans 1.1.54337: si l'utilisateur par défaut a un accès en lecture seule, le serveur refuse de démarrer avec le message `Cannot create database in readonly mode`. +- Correction d'une régression dans 1.1.54337: sur les systèmes avec systemd, les journaux sont toujours écrits dans syslog quelle que soit la configuration; le script watchdog utilise toujours init.d. +- Correction d'une régression dans 1.1.54337: mauvaise configuration par défaut dans L'image Docker. +- Correction du comportement non déterministe de GraphiteMergeTree (vous pouvez le voir dans les messages de journal `Data after merge is not byte-identical to the data on another replicas`). +- Correction d'un bug qui peut conduire à des fusions incohérentes après optimiser la requête aux tables répliquées (vous pouvez le voir dans les messages de journal `Part ... intersects the previous part`). +- Les tables tampon fonctionnent maintenant correctement lorsque des colonnes matérialisées sont présentes dans la table de destination (par zhang2014). +- Correction d'un bug dans la mise en œuvre de NULL. + +### Clickhouse Version 1.1.54337, 2018-01-18 {#clickhouse-release-1-1-54337-2018-01-18} + +#### Nouveauté: {#new-features-17} + +- Ajout du support pour le stockage de tableaux et de tuples multidimensionnels (`Tuple` type de données) dans les tableaux. +- Prise en charge des fonctions de table pour `DESCRIBE` et `INSERT` requête. Ajout du support pour les sous-requêtes dans `DESCRIBE`. Exemple: `DESC TABLE remote('host', default.hits)`; `DESC TABLE (SELECT 1)`; `INSERT INTO TABLE FUNCTION remote('host', default.hits)`. Soutien pour `INSERT INTO TABLE` outre `INSERT INTO`. +- Amélioration du support pour les fuseaux horaires. Le `DateTime` le type de données peut être annoté avec le fuseau horaire utilisé pour l'analyse et le formatage dans les formats de texte. Exemple: `DateTime('Europe/Moscow')`. Lorsque les fuseaux horaires sont spécifiés dans les fonctions `DateTime` arguments, le type de retour pour suivre le fuseau horaire, et la valeur sera affichée comme prévu. +- Ajout des fonctions `toTimeZone`, `timeDiff`, `toQuarter`, `toRelativeQuarterNum`. Le `toRelativeHour`/`Minute`/`Second` les fonctions peuvent prendre une valeur de type `Date` comme argument. Le `now` nom de la fonction est sensible à la casse. +- Ajouté le `toStartOfFifteenMinutes` fonction (Kirill Shvakov). +- Ajouté le `clickhouse format` outil de formatage des requêtes. +- Ajouté le `format_schema_path` configuration parameter (Marek Vavruşa). It is used for specifying a schema in `Cap'n Proto` format. Les fichiers de schéma peuvent être situés uniquement dans le répertoire spécifié. +- Ajout du support pour les substitutions de configuration (`incl` et `conf.d`) pour la configuration de dictionnaires et de modèles externes (Pavel Yakunin). +- Ajout d'une colonne avec la documentation pour le `system.settings` table (Kirill Shvakov). +- Ajouté le `system.parts_columns` table avec des informations sur la taille des colonnes dans chaque partie `MergeTree` table. +- Ajouté le `system.models` tableau avec des informations sur chargé `CatBoost` machine de modèles d'apprentissage. +- Ajouté le `mysql` et `odbc` fonction de table et correspondant `MySQL` et `ODBC` moteurs de table pour accéder aux bases de données distantes. Cette fonctionnalité est en phase bêta. +- Ajout de la possibilité de passer un argument de type `AggregateFunction` pour l' `groupArray` fonction d'agrégation (vous pouvez donc créer un tableau d'États d'une fonction d'agrégation). +- Suppression des restrictions sur diverses combinaisons de combinateurs de fonction d'agrégat. Par exemple, vous pouvez utiliser `avgForEachIf` ainsi que `avgIfForEach` les fonctions d'agrégation, qui ont des comportements différents. +- Le `-ForEach` fonction d'agrégation combinator est prolongée pour le cas des fonctions d'agrégation de plusieurs arguments. +- Ajout du support pour les fonctions d'agrégation de `Nullable` arguments même pour les cas où la fonction renvoie un non-`Nullable` résultat (ajouté avec la contribution de Silviu Caragea). Exemple: `groupArray`, `groupUniqArray`, `topK`. +- Ajouté le `max_client_network_bandwidth` pour `clickhouse-client` (Kirill Shvakov). +- Les utilisateurs avec le `readonly = 2` setting are allowed to work with TEMPORARY tables (CREATE, DROP, INSERT…) (Kirill Shvakov). +- Ajout du support pour l'utilisation de plusieurs consommateurs avec le `Kafka` moteur. Options de configuration étendues pour `Kafka` (Marek Vavruša). +- Ajouté le `intExp3` et `intExp4` fonction. +- Ajouté le `sumKahan` fonction d'agrégation. +- Ajout des fonctions to\* Number \* OrNull, où \* Number \* est un type numérique. +- Ajout du support pour `WITH` clauses pour un `INSERT SELECT` requête (auteur: zhang2014). +- Ajout des paramètres de: `http_connection_timeout`, `http_send_timeout`, `http_receive_timeout`. En particulier, ces paramètres sont utilisés pour télécharger des parties de données pour la réplication. La modification de ces paramètres permet un basculement plus rapide si le réseau est surchargé. +- Ajout du support pour `ALTER` pour les tables de type `Null` (Anastasiya Tsarkova). +- Le `reinterpretAsString` la fonction est étendue pour tous les types de données stockés de manière contiguë en mémoire. +- Ajouté le `--silent` option pour le `clickhouse-local` outil. Il supprime les informations d'exécution de requête d'impression dans stderr. +- Ajout du support pour la lecture des valeurs de type `Date` à partir du texte dans un format où le mois et / ou le jour du mois est spécifié en utilisant un seul chiffre au lieu de deux chiffres (oiseau Amos). + +#### Optimisations des performances: {#performance-optimizations} + +- Amélioration des performances des fonctions d'agrégation `min`, `max`, `any`, `anyLast`, `anyHeavy`, `argMin`, `argMax` à partir d'arguments de chaîne. +- Amélioration des performances des fonctions `isInfinite`, `isFinite`, `isNaN`, `roundToExp2`. +- Amélioration des performances de l'analyse et du formatage `Date` et `DateTime` tapez les valeurs au format texte. +- Amélioration des performances et de la précision de l'analyse des nombres à virgule flottante. +- Abaissé l'utilisation de la mémoire pour `JOIN` dans le cas où les parties gauche et droite ont des colonnes avec des noms identiques qui ne sont pas contenus dans `USING` . +- Amélioration des performances des fonctions d'agrégation `varSamp`, `varPop`, `stddevSamp`, `stddevPop`, `covarSamp`, `covarPop`, `corr` en réduisant la stabilité de calcul. Les anciennes fonctions sont disponibles sous les noms de `varSampStable`, `varPopStable`, `stddevSampStable`, `stddevPopStable`, `covarSampStable`, `covarPopStable`, `corrStable`. + +#### Corrections de bugs: {#bug-fixes-28} + +- Déduplication de données fixe après l'exécution d'un `DROP` ou `DETACH PARTITION` requête. Dans la version précédente, la suppression d'une partition et l'insertion à nouveau des mêmes données ne fonctionnaient pas car les blocs insérés étaient considérés comme des doublons. +- Correction d'un bug qui pourrait conduire à une interprétation incorrecte de la `WHERE` la clause de `CREATE MATERIALIZED VIEW` les requêtes avec `POPULATE` . +- Correction d'un bug dans l'utilisation de l' `root_path` paramètre dans l' `zookeeper_servers` configuration. +- Correction des résultats inattendus du passage du `Date` argument `toStartOfDay` . +- Correction de l' `addMonths` et `subtractMonths` fonctions et l'arithmétique pour `INTERVAL n MONTH` dans les cas où le résultat de l'année précédente. +- Ajout du support manquant pour le `UUID` type de données pour `DISTINCT` , `JOIN` , et `uniq` fonctions agrégées et dictionnaires externes (Evgeniy Ivanov). Soutien pour `UUID` est encore incomplète. +- Fixe `SummingMergeTree` comportement dans les cas où les lignes additionnées à zéro. +- Diverses corrections pour le `Kafka` engine (Marek Vavruša). +- Correction d'un comportement incorrect de la `Join` moteur de table (oiseau Amos). +- Correction d'un comportement d'allocateur incorrect sous FreeBSD et OS X. +- Le `extractAll` fonction prend désormais en charge les correspondances vides. +- Correction d'une erreur qui bloquait l'utilisation de `libressl` plutôt `openssl` . +- Correction de l' `CREATE TABLE AS SELECT` requête à partir de tables temporaires. +- Correction de la non-atomicité de la mise à jour de la file d'attente de réplication. Cela peut entraîner la désynchronisation des répliques jusqu'au redémarrage du serveur. +- Correction d'un débordement possible dans `gcd` , `lcm` et `modulo` (`%` de l'opérateur) (Mak Skorokhod). +- `-preprocessed` les fichiers sont maintenant créés après modification `umask` (`umask` peut être changé dans le fichier de configuration). +- Correction d'un bug dans la vérification des antécédents des pièces (`MergeTreePartChecker` ) lors de l'utilisation d'une coutume clé de partition. +- Correction de l'analyse des tuples (valeurs du `Tuple` type de données) dans des formats de texte. +- Amélioration des messages d'erreur sur les types incompatibles transmis à `multiIf` , `array` et quelques autres fonctions. +- Repensé de soutien pour `Nullable` type. Correction de bugs qui peuvent conduire à un plantage du serveur. Correction de presque tous les autres bugs liés à `NULL` support: conversions de type incorrectes dans INSERT SELECT, support insuffisant pour Nullable dans HAVING et PREWHERE, `join_use_nulls` mode, Nullable types comme arguments de `OR` l'opérateur, etc. +- Correction de divers bugs liés à la sémantique interne des types de données. Exemples: sommation inutile de `Enum` tapez les champs dans `SummingMergeTree` ; l'alignement de la `Enum` types de `Pretty` formats, etc. +- Contrôles plus stricts pour les combinaisons autorisées de colonnes composites. +- Correction du débordement lors de la spécification d'un très grand paramètre pour le `FixedString` type de données. +- Correction d'un bug dans l' `topK` fonction d'agrégation dans un cas générique. +- Ajout de la vérification manquante pour l'égalité des tailles de tableau dans les arguments de n-ARY variantes de fonctions d'agrégation avec un `-Array` combinator. +- Correction d'un bug dans `--pager` pour `clickhouse-client` (auteur: ks1322). +- Fixe la précision de la `exp10` fonction. +- Correction du comportement du `visitParamExtract` fonction pour une meilleure conformité avec la documentation. +- Correction du crash lorsque des types de données incorrects sont spécifiés. +- Correction du comportement de `DISTINCT` dans le cas lorsque toutes les colonnes sont des constantes. +- Correction du formatage de la requête dans le cas de l'utilisation du `tupleElement` fonction avec une expression constante complexe comme indice d'élément tuple. +- Correction d'un bug dans `Dictionary` tables pour `range_hashed` dictionnaire. +- Correction d'un bug qui conduit à des lignes excessives dans le résultat de `FULL` et `RIGHT JOIN` (Oiseau Amos). +- Correction d'un plantage du serveur lors de la création et de la suppression de fichiers temporaires `config.d` répertoires pendant le rechargement de la configuration. +- Correction de l' `SYSTEM DROP DNS CACHE` requête: le cache a été vidé mais les adresses des nœuds de cluster n'ont pas été mises à jour. +- Correction du comportement de `MATERIALIZED VIEW` après l'exécution de `DETACH TABLE` for the table under the view (Marek Vavruša). + +#### Construire des améliorations: {#build-improvements-4} + +- Le `pbuilder` l'outil est utilisé pour les versions. Le processus de construction est presque complètement indépendant de l'environnement hôte de construction. +- Une seule version est utilisée pour différentes versions du système d'exploitation. Les paquets et les binaires ont été rendus compatibles avec un large éventail de systèmes Linux. +- Ajouté le `clickhouse-test` paquet. Il peut être utilisé pour exécuter des tests fonctionnels. +- L'archive source peut maintenant être publié dans le référentiel. Il peut être utilisé pour reproduire la construction sans utiliser GitHub. +- Ajout d'une intégration limitée avec Travis CI. En raison des limites de temps de construction dans Travis, seule la construction de débogage est testée et un sous-ensemble limité de tests est exécuté. +- Ajout du support pour `Cap'n'Proto` dans la construction par défaut. +- Modification du format des sources de documentation à partir de `Restricted Text` de `Markdown`. +- Ajout du support pour `systemd` (Vladimir Smirnov). Il est désactivé par défaut en raison d'une incompatibilité avec certaines images du système D'exploitation et peut être activé manuellement. +- Pour la génération de code dynamique, `clang` et `lld` sont intégrées dans le `clickhouse` binaire. Ils peuvent également être invoqués comme `clickhouse clang` et `clickhouse lld` . +- Suppression de l'utilisation des extensions GNU du code. Permis à l' `-Wextra` option. Lors de la construction avec `clang` la valeur par défaut est `libc++` plutôt `libstdc++`. +- Extrait `clickhouse_parsers` et `clickhouse_common_io` les bibliothèques pour accélérer les constructions des différents outils. + +#### Modifications incompatibles en arrière: {#backward-incompatible-changes-11} + +- Le format des marques dans `Log` tapez les tables qui contiennent `Nullable` les colonnes ont été modifiées d'une manière incompatible avec l'arrière. Si vous avez ces tables, vous devez les convertir en `TinyLog` tapez avant de démarrer la nouvelle version du serveur. Pour ce faire, remplacez `ENGINE = Log` avec `ENGINE = TinyLog` dans le correspondant `.sql` fichier dans le `metadata` répertoire. Si votre table n'a pas `Nullable` les colonnes ou si le type de votre table n'est pas `Log`, alors vous n'avez pas besoin de faire quoi que ce soit. +- Enlevé le `experimental_allow_extended_storage_definition_syntax` paramètre. Maintenant cette fonctionnalité est activée par défaut. +- Le `runningIncome` fonction a été renommée en `runningDifferenceStartingWithFirstvalue` pour éviter toute confusion. +- Enlevé le `FROM ARRAY JOIN arr` syntaxe lorsque la jointure du tableau est spécifiée directement après FROM sans table (Amos Bird). +- Enlevé le `BlockTabSeparated` format utilisé uniquement à des fins de démonstration. +- Modification du format d'État pour les fonctions d'agrégation `varSamp`, `varPop`, `stddevSamp`, `stddevPop`, `covarSamp`, `covarPop`, `corr`. Si vous avez stocké des états de ces fonctions d'agrégat dans des tables (en utilisant `AggregateFunction` type de données ou vues matérialisées avec les états correspondants), écrivez svp à clickhouse-feedback@yandex-team.com. +- Dans les versions précédentes du serveur, il y avait une fonctionnalité non documentée: si une fonction d'agrégation dépend de paramètres, vous pouvez toujours la spécifier sans paramètres dans le type de données AggregateFunction. Exemple: `AggregateFunction(quantiles, UInt64)` plutôt `AggregateFunction(quantiles(0.5, 0.9), UInt64)`. Cette fonctionnalité a été perdu. Bien qu'il ne soit pas documenté, nous prévoyons de le soutenir à nouveau dans les prochaines versions. +- Les types de données Enum ne peuvent pas être utilisés dans les fonctions d'agrégat min/max. Cette capacité sera rendu dans la prochaine version. + +#### Veuillez noter lors de la mise à niveau: {#please-note-when-upgrading} + +- Lorsque vous effectuez une mise à jour continue sur un cluster, au moment où certaines répliques exécutent L'ancienne version de ClickHouse et d'autres la nouvelle version, la réplication est temporairement arrêtée et le message `unknown parameter 'shard'` apparaît dans le journal. La réplication se poursuivra après la mise à jour de toutes les répliques du cluster. +- Si différentes versions de ClickHouse sont en cours d'exécution sur les serveurs de cluster, il est possible que les requêtes distribuées utilisant les fonctions suivantes aient des résultats incorrects: `varSamp`, `varPop`, `stddevSamp`, `stddevPop`, `covarSamp`, `covarPop`, `corr`. Vous devez mettre à jour tous les nœuds de cluster. + +## [Changelog pour 2017](https://github.com/ClickHouse/ClickHouse/blob/master/docs/en/changelog/2017.md) {#changelog-for-2017} diff --git a/docs/fr/changelog/2019.md b/docs/fr/changelog/2019.md new file mode 120000 index 00000000000..105ca144fca --- /dev/null +++ b/docs/fr/changelog/2019.md @@ -0,0 +1 @@ +../../en/changelog/2019.md \ No newline at end of file diff --git a/docs/fr/changelog/index.md b/docs/fr/changelog/index.md new file mode 100644 index 00000000000..710f11ba1d5 --- /dev/null +++ b/docs/fr/changelog/index.md @@ -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 (`` 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 `ab` vous devez écrire `a\tb` ou `a\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 `` 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: `…
`. 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(, 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} diff --git a/docs/fr/commercial/cloud.md b/docs/fr/commercial/cloud.md new file mode 100644 index 00000000000..ec592154f52 --- /dev/null +++ b/docs/fr/commercial/cloud.md @@ -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/) ##} diff --git a/docs/fr/data_types/array.md b/docs/fr/data_types/array.md new file mode 100644 index 00000000000..f20abaabc49 --- /dev/null +++ b/docs/fr/data_types/array.md @@ -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/) diff --git a/docs/fr/data_types/boolean.md b/docs/fr/data_types/boolean.md new file mode 100644 index 00000000000..693709cda9f --- /dev/null +++ b/docs/fr/data_types/boolean.md @@ -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/) diff --git a/docs/fr/data_types/date.md b/docs/fr/data_types/date.md new file mode 100644 index 00000000000..812b0682cd2 --- /dev/null +++ b/docs/fr/data_types/date.md @@ -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/) diff --git a/docs/fr/data_types/datetime.md b/docs/fr/data_types/datetime.md new file mode 100644 index 00000000000..797364b3f51 --- /dev/null +++ b/docs/fr/data_types/datetime.md @@ -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/) diff --git a/docs/fr/data_types/datetime64.md b/docs/fr/data_types/datetime64.md new file mode 100644 index 00000000000..3b9acff1731 --- /dev/null +++ b/docs/fr/data_types/datetime64.md @@ -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-précision 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) diff --git a/docs/fr/data_types/decimal.md b/docs/fr/data_types/decimal.md new file mode 100644 index 00000000000..902df0d9519 --- /dev/null +++ b/docs/fr/data_types/decimal.md @@ -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) Decimal32 (S2) - \> Decimal64 (S) +- Décimal128 (S1) Decimal32 (S2) - \> Decimal128 (S) +- Décimal128 (S1) 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/) diff --git a/docs/fr/data_types/domains/ipv4.md b/docs/fr/data_types/domains/ipv4.md new file mode 100644 index 00000000000..bba8fcaf1e1 --- /dev/null +++ b/docs/fr/data_types/domains/ipv4.md @@ -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) diff --git a/docs/fr/data_types/domains/ipv6.md b/docs/fr/data_types/domains/ipv6.md new file mode 100644 index 00000000000..52cc1c92536 --- /dev/null +++ b/docs/fr/data_types/domains/ipv6.md @@ -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) │ ��� │ +└───────────────────────────────────────────┴─────────┘ +``` + +[Article Original](https://clickhouse.tech/docs/en/data_types/domains/ipv6) diff --git a/docs/fr/data_types/domains/overview.md b/docs/fr/data_types/domains/overview.md new file mode 100644 index 00000000000..c7341b2252f --- /dev/null +++ b/docs/fr/data_types/domains/overview.md @@ -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) diff --git a/docs/fr/data_types/enum.md b/docs/fr/data_types/enum.md new file mode 100644 index 00000000000..bb1e43ea15f --- /dev/null +++ b/docs/fr/data_types/enum.md @@ -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/) diff --git a/docs/fr/data_types/fixedstring.md b/docs/fr/data_types/fixedstring.md new file mode 100644 index 00000000000..0bb91baf681 --- /dev/null +++ b/docs/fr/data_types/fixedstring.md @@ -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 + 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/) diff --git a/docs/fr/data_types/float.md b/docs/fr/data_types/float.md new file mode 100644 index 00000000000..8458f0e13da --- /dev/null +++ b/docs/fr/data_types/float.md @@ -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/) diff --git a/docs/fr/data_types/index.md b/docs/fr/data_types/index.md new file mode 100644 index 00000000000..f5f9386c042 --- /dev/null +++ b/docs/fr/data_types/index.md @@ -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/) diff --git a/docs/fr/data_types/int_uint.md b/docs/fr/data_types/int_uint.md new file mode 100644 index 00000000000..ec3018d42c8 --- /dev/null +++ b/docs/fr/data_types/int_uint.md @@ -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/) diff --git a/docs/fr/data_types/nested_data_structures/aggregatefunction.md b/docs/fr/data_types/nested_data_structures/aggregatefunction.md new file mode 100644 index 00000000000..ba4d1e9cd73 --- /dev/null +++ b/docs/fr/data_types/nested_data_structures/aggregatefunction.md @@ -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/) diff --git a/docs/fr/data_types/nested_data_structures/index.md b/docs/fr/data_types/nested_data_structures/index.md new file mode 100644 index 00000000000..9691b587181 --- /dev/null +++ b/docs/fr/data_types/nested_data_structures/index.md @@ -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/) diff --git a/docs/fr/data_types/nested_data_structures/nested.md b/docs/fr/data_types/nested_data_structures/nested.md new file mode 100644 index 00000000000..f6dceb4b6c1 --- /dev/null +++ b/docs/fr/data_types/nested_data_structures/nested.md @@ -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/) diff --git a/docs/fr/data_types/nullable.md b/docs/fr/data_types/nullable.md new file mode 100644 index 00000000000..3a5c6bcff6c --- /dev/null +++ b/docs/fr/data_types/nullable.md @@ -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/) diff --git a/docs/fr/data_types/special_data_types/expression.md b/docs/fr/data_types/special_data_types/expression.md new file mode 100644 index 00000000000..a368afa07ba --- /dev/null +++ b/docs/fr/data_types/special_data_types/expression.md @@ -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/) diff --git a/docs/fr/data_types/special_data_types/index.md b/docs/fr/data_types/special_data_types/index.md new file mode 100644 index 00000000000..a55535d7541 --- /dev/null +++ b/docs/fr/data_types/special_data_types/index.md @@ -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/) diff --git a/docs/fr/data_types/special_data_types/interval.md b/docs/fr/data_types/special_data_types/interval.md new file mode 100644 index 00000000000..b5ee83bf6bd --- /dev/null +++ b/docs/fr/data_types/special_data_types/interval.md @@ -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 diff --git a/docs/fr/data_types/special_data_types/nothing.md b/docs/fr/data_types/special_data_types/nothing.md new file mode 100644 index 00000000000..1e93f58d9d9 --- /dev/null +++ b/docs/fr/data_types/special_data_types/nothing.md @@ -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/) diff --git a/docs/fr/data_types/special_data_types/set.md b/docs/fr/data_types/special_data_types/set.md new file mode 100644 index 00000000000..82dcef10abe --- /dev/null +++ b/docs/fr/data_types/special_data_types/set.md @@ -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/) diff --git a/docs/fr/data_types/string.md b/docs/fr/data_types/string.md new file mode 100644 index 00000000000..a34495c0f79 --- /dev/null +++ b/docs/fr/data_types/string.md @@ -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/) diff --git a/docs/fr/data_types/tuple.md b/docs/fr/data_types/tuple.md new file mode 100644 index 00000000000..2f180046753 --- /dev/null +++ b/docs/fr/data_types/tuple.md @@ -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/) diff --git a/docs/fr/data_types/uuid.md b/docs/fr/data_types/uuid.md new file mode 100644 index 00000000000..86790c6265e --- /dev/null +++ b/docs/fr/data_types/uuid.md @@ -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/) diff --git a/docs/fr/database_engines/index.md b/docs/fr/database_engines/index.md new file mode 100644 index 00000000000..6bd365428e0 --- /dev/null +++ b/docs/fr/database_engines/index.md @@ -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/) diff --git a/docs/fr/database_engines/lazy.md b/docs/fr/database_engines/lazy.md new file mode 100644 index 00000000000..203c62d815b --- /dev/null +++ b/docs/fr/database_engines/lazy.md @@ -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/) diff --git a/docs/fr/database_engines/mysql.md b/docs/fr/database_engines/mysql.md new file mode 100644 index 00000000000..c56771e34c2 --- /dev/null +++ b/docs/fr/database_engines/mysql.md @@ -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/) diff --git a/docs/fr/development/architecture.md b/docs/fr/development/architecture.md new file mode 100644 index 00000000000..ad19a0d4231 --- /dev/null +++ b/docs/fr/development/architecture.md @@ -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/) ##} diff --git a/docs/fr/development/browse_code.md b/docs/fr/development/browse_code.md new file mode 100644 index 00000000000..49f49dcb26e --- /dev/null +++ b/docs/fr/development/browse_code.md @@ -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. diff --git a/docs/fr/development/build.md b/docs/fr/development/build.md new file mode 100644 index 00000000000..7fa1bb066ea --- /dev/null +++ b/docs/fr/development/build.md @@ -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/) diff --git a/docs/fr/development/build_cross_arm.md b/docs/fr/development/build_cross_arm.md new file mode 100644 index 00000000000..c7ec1857151 --- /dev/null +++ b/docs/fr/development/build_cross_arm.md @@ -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. diff --git a/docs/fr/development/build_cross_osx.md b/docs/fr/development/build_cross_osx.md new file mode 100644 index 00000000000..f95663992c3 --- /dev/null +++ b/docs/fr/development/build_cross_osx.md @@ -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. diff --git a/docs/fr/development/build_osx.md b/docs/fr/development/build_osx.md new file mode 100644 index 00000000000..9730a864726 --- /dev/null +++ b/docs/fr/development/build_osx.md @@ -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 + + + + + Label + limit.maxfiles + ProgramArguments + + launchctl + limit + maxfiles + 524288 + 524288 + + RunAtLoad + + ServiceIPC + + + +``` + +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/) diff --git a/docs/fr/development/contrib.md b/docs/fr/development/contrib.md new file mode 100644 index 00000000000..2d06428dba0 --- /dev/null +++ b/docs/fr/development/contrib.md @@ -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) | diff --git a/docs/fr/development/developer_instruction.md b/docs/fr/development/developer_instruction.md new file mode 100644 index 00000000000..fedec292b2b --- /dev/null +++ b/docs/fr/development/developer_instruction.md @@ -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//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. diff --git a/docs/fr/development/index.md b/docs/fr/development/index.md new file mode 100644 index 00000000000..a888dbc7d14 --- /dev/null +++ b/docs/fr/development/index.md @@ -0,0 +1,7 @@ +--- +machine_translated: true +--- + +# Développement De ClickHouse {#clickhouse-development} + +[Article Original](https://clickhouse.tech/docs/en/development/) diff --git a/docs/fr/development/style.md b/docs/fr/development/style.md new file mode 100644 index 00000000000..782aca7d1d3 --- /dev/null +++ b/docs/fr/development/style.md @@ -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 +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 +class MultiVersion +{ +public: + /// Version of object for usage. shared_ptr manage lifetime of version. + using Version = std::shared_ptr; + ... +} +``` + +**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>; +FileStreams streams; +//incorrect +std::map> 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(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 +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 +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 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 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; + +/** 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/) diff --git a/docs/fr/development/tests.md b/docs/fr/development/tests.md new file mode 100644 index 00000000000..2060223c80f --- /dev/null +++ b/docs/fr/development/tests.md @@ -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/) diff --git a/docs/fr/faq/general.md b/docs/fr/faq/general.md new file mode 100644 index 00000000000..51193676500 --- /dev/null +++ b/docs/fr/faq/general.md @@ -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/) ##} diff --git a/docs/fr/getting_started/example_datasets/amplab_benchmark.md b/docs/fr/getting_started/example_datasets/amplab_benchmark.md new file mode 100644 index 00000000000..21b27e23615 --- /dev/null +++ b/docs/fr/getting_started/example_datasets/amplab_benchmark.md @@ -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/) diff --git a/docs/fr/getting_started/example_datasets/criteo.md b/docs/fr/getting_started/example_datasets/criteo.md new file mode 100644 index 00000000000..610ed78febd --- /dev/null +++ b/docs/fr/getting_started/example_datasets/criteo.md @@ -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/) diff --git a/docs/fr/getting_started/example_datasets/index.md b/docs/fr/getting_started/example_datasets/index.md new file mode 100644 index 00000000000..584214d5718 --- /dev/null +++ b/docs/fr/getting_started/example_datasets/index.md @@ -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) diff --git a/docs/fr/getting_started/example_datasets/metrica.md b/docs/fr/getting_started/example_datasets/metrica.md new file mode 100644 index 00000000000..7ddca6462eb --- /dev/null +++ b/docs/fr/getting_started/example_datasets/metrica.md @@ -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). diff --git a/docs/fr/getting_started/example_datasets/nyc_taxi.md b/docs/fr/getting_started/example_datasets/nyc_taxi.md new file mode 100644 index 00000000000..a1179c22d37 --- /dev/null +++ b/docs/fr/getting_started/example_datasets/nyc_taxi.md @@ -0,0 +1,387 @@ +--- +machine_translated: true +--- + +# New York Taxi Données {#new-york-taxi-data} + +Ce jeu de données peut être obtenu de deux façons: + +- importation à partir de données brutes +- téléchargement de partitions + +## Comment importer les données brutes {#how-to-import-the-raw-data} + +Tu vois https://github.com/toddwschneider/nyc-taxi-data et http://tech.marksblogg.com/billion-nyc-taxi-rides-redshift.html pour la description d'un ensemble de données et les instructions de téléchargement. + +Le téléchargement entraînera environ 227 Go de données non compressées dans des fichiers CSV. Le téléchargement prend environ une heure sur une connexion 1 Gbit (téléchargement parallèle depuis s3.amazonaws.com récupère au moins la moitié d'un canal 1 Gbit). +Certains fichiers peuvent ne pas télécharger entièrement. Vérifiez la taille des fichiers et re-télécharger tout ce qui semble douteux. + +Certains fichiers peuvent contenir des lignes invalides. Vous pouvez les corriger comme suit: + +``` bash +sed -E '/(.*,){18,}/d' data/yellow_tripdata_2010-02.csv > data/yellow_tripdata_2010-02.csv_ +sed -E '/(.*,){18,}/d' data/yellow_tripdata_2010-03.csv > data/yellow_tripdata_2010-03.csv_ +mv data/yellow_tripdata_2010-02.csv_ data/yellow_tripdata_2010-02.csv +mv data/yellow_tripdata_2010-03.csv_ data/yellow_tripdata_2010-03.csv +``` + +Ensuite, les données doivent être pré-traitées dans PostgreSQL. Cela créera des sélections de points dans les polygones (pour faire correspondre les points sur la carte avec les arrondissements de New York) et combinera toutes les données en une seule table plate dénormalisée à l'aide d'une jointure. Pour ce faire, vous devrez installer PostgreSQL avec le support PostGIS. + +Soyez prudent lors de l'exécution `initialize_database.sh` et vérifiez à nouveau manuellement que toutes les tables ont été créées correctement. + +Il faut environ 20-30 minutes pour traiter la valeur de chaque mois de données dans PostgreSQL, pour un total d'environ 48 heures. + +Vous pouvez vérifier le nombre de téléchargé lignes comme suit: + +``` bash +$ time psql nyc-taxi-data -c "SELECT count(*) FROM trips;" +## Count + 1298979494 +(1 row) + +real 7m9.164s +``` + +(C'est un peu plus de 1,1 milliard de lignes rapportées par Mark Litwintschik dans une série de billets de blog.) + +Les données de PostgreSQL utilisent 370 GO d'espace. + +Exportation des données depuis PostgreSQL: + +``` sql +COPY +( + SELECT trips.id, + trips.vendor_id, + trips.pickup_datetime, + trips.dropoff_datetime, + trips.store_and_fwd_flag, + trips.rate_code_id, + trips.pickup_longitude, + trips.pickup_latitude, + trips.dropoff_longitude, + trips.dropoff_latitude, + trips.passenger_count, + trips.trip_distance, + trips.fare_amount, + trips.extra, + trips.mta_tax, + trips.tip_amount, + trips.tolls_amount, + trips.ehail_fee, + trips.improvement_surcharge, + trips.total_amount, + trips.payment_type, + trips.trip_type, + trips.pickup, + trips.dropoff, + + cab_types.type cab_type, + + weather.precipitation_tenths_of_mm rain, + weather.snow_depth_mm, + weather.snowfall_mm, + weather.max_temperature_tenths_degrees_celsius max_temp, + weather.min_temperature_tenths_degrees_celsius min_temp, + weather.average_wind_speed_tenths_of_meters_per_second wind, + + pick_up.gid pickup_nyct2010_gid, + pick_up.ctlabel pickup_ctlabel, + pick_up.borocode pickup_borocode, + pick_up.boroname pickup_boroname, + pick_up.ct2010 pickup_ct2010, + pick_up.boroct2010 pickup_boroct2010, + pick_up.cdeligibil pickup_cdeligibil, + pick_up.ntacode pickup_ntacode, + pick_up.ntaname pickup_ntaname, + pick_up.puma pickup_puma, + + drop_off.gid dropoff_nyct2010_gid, + drop_off.ctlabel dropoff_ctlabel, + drop_off.borocode dropoff_borocode, + drop_off.boroname dropoff_boroname, + drop_off.ct2010 dropoff_ct2010, + drop_off.boroct2010 dropoff_boroct2010, + drop_off.cdeligibil dropoff_cdeligibil, + drop_off.ntacode dropoff_ntacode, + drop_off.ntaname dropoff_ntaname, + drop_off.puma dropoff_puma + FROM trips + LEFT JOIN cab_types + ON trips.cab_type_id = cab_types.id + LEFT JOIN central_park_weather_observations_raw weather + ON weather.date = trips.pickup_datetime::date + LEFT JOIN nyct2010 pick_up + ON pick_up.gid = trips.pickup_nyct2010_gid + LEFT JOIN nyct2010 drop_off + ON drop_off.gid = trips.dropoff_nyct2010_gid +) TO '/opt/milovidov/nyc-taxi-data/trips.tsv'; +``` + +L'instantané de données est créé à une vitesse d'environ 50 Mo par seconde. Lors de la création de l'instantané, PostgreSQL lit à partir du disque à une vitesse d'environ 28 Mo par seconde. +Cela prend environ 5 heures. Le fichier TSV résultant est 590612904969 octets. + +Créer une table temporaire dans ClickHouse: + +``` sql +CREATE TABLE trips +( +trip_id UInt32, +vendor_id String, +pickup_datetime DateTime, +dropoff_datetime Nullable(DateTime), +store_and_fwd_flag Nullable(FixedString(1)), +rate_code_id Nullable(UInt8), +pickup_longitude Nullable(Float64), +pickup_latitude Nullable(Float64), +dropoff_longitude Nullable(Float64), +dropoff_latitude Nullable(Float64), +passenger_count Nullable(UInt8), +trip_distance Nullable(Float64), +fare_amount Nullable(Float32), +extra Nullable(Float32), +mta_tax Nullable(Float32), +tip_amount Nullable(Float32), +tolls_amount Nullable(Float32), +ehail_fee Nullable(Float32), +improvement_surcharge Nullable(Float32), +total_amount Nullable(Float32), +payment_type Nullable(String), +trip_type Nullable(UInt8), +pickup Nullable(String), +dropoff Nullable(String), +cab_type Nullable(String), +precipitation Nullable(UInt8), +snow_depth Nullable(UInt8), +snowfall Nullable(UInt8), +max_temperature Nullable(UInt8), +min_temperature Nullable(UInt8), +average_wind_speed Nullable(UInt8), +pickup_nyct2010_gid Nullable(UInt8), +pickup_ctlabel Nullable(String), +pickup_borocode Nullable(UInt8), +pickup_boroname Nullable(String), +pickup_ct2010 Nullable(String), +pickup_boroct2010 Nullable(String), +pickup_cdeligibil Nullable(FixedString(1)), +pickup_ntacode Nullable(String), +pickup_ntaname Nullable(String), +pickup_puma Nullable(String), +dropoff_nyct2010_gid Nullable(UInt8), +dropoff_ctlabel Nullable(String), +dropoff_borocode Nullable(UInt8), +dropoff_boroname Nullable(String), +dropoff_ct2010 Nullable(String), +dropoff_boroct2010 Nullable(String), +dropoff_cdeligibil Nullable(String), +dropoff_ntacode Nullable(String), +dropoff_ntaname Nullable(String), +dropoff_puma Nullable(String) +) ENGINE = Log; +``` + +Il est nécessaire pour convertir les champs en types de données plus corrects et, si possible, pour éliminer les valeurs Null. + +``` bash +$ time clickhouse-client --query="INSERT INTO trips FORMAT TabSeparated" < trips.tsv + +real 75m56.214s +``` + +Les données sont lues à une vitesse de 112-140 Mo/seconde. +Le chargement de données dans une table de type de journal dans un flux a pris 76 minutes. +Les données de ce tableau utilisent 142 GO. + +(L'importation de données directement depuis Postgres est également possible en utilisant `COPY ... TO PROGRAM`.) + +Unfortunately, all the fields associated with the weather (precipitation…average\_wind\_speed) were filled with NULL. Because of this, we will remove them from the final data set. + +Pour commencer, nous allons créer une table sur un serveur unique. Plus tard, nous ferons le tableau distribué. + +Créer et remplir un tableau récapitulatif: + +``` sql +CREATE TABLE trips_mergetree +ENGINE = MergeTree(pickup_date, pickup_datetime, 8192) +AS SELECT + +trip_id, +CAST(vendor_id AS Enum8('1' = 1, '2' = 2, 'CMT' = 3, 'VTS' = 4, 'DDS' = 5, 'B02512' = 10, 'B02598' = 11, 'B02617' = 12, 'B02682' = 13, 'B02764' = 14)) AS vendor_id, +toDate(pickup_datetime) AS pickup_date, +ifNull(pickup_datetime, toDateTime(0)) AS pickup_datetime, +toDate(dropoff_datetime) AS dropoff_date, +ifNull(dropoff_datetime, toDateTime(0)) AS dropoff_datetime, +assumeNotNull(store_and_fwd_flag) IN ('Y', '1', '2') AS store_and_fwd_flag, +assumeNotNull(rate_code_id) AS rate_code_id, +assumeNotNull(pickup_longitude) AS pickup_longitude, +assumeNotNull(pickup_latitude) AS pickup_latitude, +assumeNotNull(dropoff_longitude) AS dropoff_longitude, +assumeNotNull(dropoff_latitude) AS dropoff_latitude, +assumeNotNull(passenger_count) AS passenger_count, +assumeNotNull(trip_distance) AS trip_distance, +assumeNotNull(fare_amount) AS fare_amount, +assumeNotNull(extra) AS extra, +assumeNotNull(mta_tax) AS mta_tax, +assumeNotNull(tip_amount) AS tip_amount, +assumeNotNull(tolls_amount) AS tolls_amount, +assumeNotNull(ehail_fee) AS ehail_fee, +assumeNotNull(improvement_surcharge) AS improvement_surcharge, +assumeNotNull(total_amount) AS total_amount, +CAST((assumeNotNull(payment_type) AS pt) IN ('CSH', 'CASH', 'Cash', 'CAS', 'Cas', '1') ? 'CSH' : (pt IN ('CRD', 'Credit', 'Cre', 'CRE', 'CREDIT', '2') ? 'CRE' : (pt IN ('NOC', 'No Charge', 'No', '3') ? 'NOC' : (pt IN ('DIS', 'Dispute', 'Dis', '4') ? 'DIS' : 'UNK'))) AS Enum8('CSH' = 1, 'CRE' = 2, 'UNK' = 0, 'NOC' = 3, 'DIS' = 4)) AS payment_type_, +assumeNotNull(trip_type) AS trip_type, +ifNull(toFixedString(unhex(pickup), 25), toFixedString('', 25)) AS pickup, +ifNull(toFixedString(unhex(dropoff), 25), toFixedString('', 25)) AS dropoff, +CAST(assumeNotNull(cab_type) AS Enum8('yellow' = 1, 'green' = 2, 'uber' = 3)) AS cab_type, + +assumeNotNull(pickup_nyct2010_gid) AS pickup_nyct2010_gid, +toFloat32(ifNull(pickup_ctlabel, '0')) AS pickup_ctlabel, +assumeNotNull(pickup_borocode) AS pickup_borocode, +CAST(assumeNotNull(pickup_boroname) AS Enum8('Manhattan' = 1, 'Queens' = 4, 'Brooklyn' = 3, '' = 0, 'Bronx' = 2, 'Staten Island' = 5)) AS pickup_boroname, +toFixedString(ifNull(pickup_ct2010, '000000'), 6) AS pickup_ct2010, +toFixedString(ifNull(pickup_boroct2010, '0000000'), 7) AS pickup_boroct2010, +CAST(assumeNotNull(ifNull(pickup_cdeligibil, ' ')) AS Enum8(' ' = 0, 'E' = 1, 'I' = 2)) AS pickup_cdeligibil, +toFixedString(ifNull(pickup_ntacode, '0000'), 4) AS pickup_ntacode, + +CAST(assumeNotNull(pickup_ntaname) AS Enum16('' = 0, 'Airport' = 1, 'Allerton-Pelham Gardens' = 2, 'Annadale-Huguenot-Prince\'s Bay-Eltingville' = 3, 'Arden Heights' = 4, 'Astoria' = 5, 'Auburndale' = 6, 'Baisley Park' = 7, 'Bath Beach' = 8, 'Battery Park City-Lower Manhattan' = 9, 'Bay Ridge' = 10, 'Bayside-Bayside Hills' = 11, 'Bedford' = 12, 'Bedford Park-Fordham North' = 13, 'Bellerose' = 14, 'Belmont' = 15, 'Bensonhurst East' = 16, 'Bensonhurst West' = 17, 'Borough Park' = 18, 'Breezy Point-Belle Harbor-Rockaway Park-Broad Channel' = 19, 'Briarwood-Jamaica Hills' = 20, 'Brighton Beach' = 21, 'Bronxdale' = 22, 'Brooklyn Heights-Cobble Hill' = 23, 'Brownsville' = 24, 'Bushwick North' = 25, 'Bushwick South' = 26, 'Cambria Heights' = 27, 'Canarsie' = 28, 'Carroll Gardens-Columbia Street-Red Hook' = 29, 'Central Harlem North-Polo Grounds' = 30, 'Central Harlem South' = 31, 'Charleston-Richmond Valley-Tottenville' = 32, 'Chinatown' = 33, 'Claremont-Bathgate' = 34, 'Clinton' = 35, 'Clinton Hill' = 36, 'Co-op City' = 37, 'College Point' = 38, 'Corona' = 39, 'Crotona Park East' = 40, 'Crown Heights North' = 41, 'Crown Heights South' = 42, 'Cypress Hills-City Line' = 43, 'DUMBO-Vinegar Hill-Downtown Brooklyn-Boerum Hill' = 44, 'Douglas Manor-Douglaston-Little Neck' = 45, 'Dyker Heights' = 46, 'East Concourse-Concourse Village' = 47, 'East Elmhurst' = 48, 'East Flatbush-Farragut' = 49, 'East Flushing' = 50, 'East Harlem North' = 51, 'East Harlem South' = 52, 'East New York' = 53, 'East New York (Pennsylvania Ave)' = 54, 'East Tremont' = 55, 'East Village' = 56, 'East Williamsburg' = 57, 'Eastchester-Edenwald-Baychester' = 58, 'Elmhurst' = 59, 'Elmhurst-Maspeth' = 60, 'Erasmus' = 61, 'Far Rockaway-Bayswater' = 62, 'Flatbush' = 63, 'Flatlands' = 64, 'Flushing' = 65, 'Fordham South' = 66, 'Forest Hills' = 67, 'Fort Greene' = 68, 'Fresh Meadows-Utopia' = 69, 'Ft. Totten-Bay Terrace-Clearview' = 70, 'Georgetown-Marine Park-Bergen Beach-Mill Basin' = 71, 'Glen Oaks-Floral Park-New Hyde Park' = 72, 'Glendale' = 73, 'Gramercy' = 74, 'Grasmere-Arrochar-Ft. Wadsworth' = 75, 'Gravesend' = 76, 'Great Kills' = 77, 'Greenpoint' = 78, 'Grymes Hill-Clifton-Fox Hills' = 79, 'Hamilton Heights' = 80, 'Hammels-Arverne-Edgemere' = 81, 'Highbridge' = 82, 'Hollis' = 83, 'Homecrest' = 84, 'Hudson Yards-Chelsea-Flatiron-Union Square' = 85, 'Hunters Point-Sunnyside-West Maspeth' = 86, 'Hunts Point' = 87, 'Jackson Heights' = 88, 'Jamaica' = 89, 'Jamaica Estates-Holliswood' = 90, 'Kensington-Ocean Parkway' = 91, 'Kew Gardens' = 92, 'Kew Gardens Hills' = 93, 'Kingsbridge Heights' = 94, 'Laurelton' = 95, 'Lenox Hill-Roosevelt Island' = 96, 'Lincoln Square' = 97, 'Lindenwood-Howard Beach' = 98, 'Longwood' = 99, 'Lower East Side' = 100, 'Madison' = 101, 'Manhattanville' = 102, 'Marble Hill-Inwood' = 103, 'Mariner\'s Harbor-Arlington-Port Ivory-Graniteville' = 104, 'Maspeth' = 105, 'Melrose South-Mott Haven North' = 106, 'Middle Village' = 107, 'Midtown-Midtown South' = 108, 'Midwood' = 109, 'Morningside Heights' = 110, 'Morrisania-Melrose' = 111, 'Mott Haven-Port Morris' = 112, 'Mount Hope' = 113, 'Murray Hill' = 114, 'Murray Hill-Kips Bay' = 115, 'New Brighton-Silver Lake' = 116, 'New Dorp-Midland Beach' = 117, 'New Springville-Bloomfield-Travis' = 118, 'North Corona' = 119, 'North Riverdale-Fieldston-Riverdale' = 120, 'North Side-South Side' = 121, 'Norwood' = 122, 'Oakland Gardens' = 123, 'Oakwood-Oakwood Beach' = 124, 'Ocean Hill' = 125, 'Ocean Parkway South' = 126, 'Old Astoria' = 127, 'Old Town-Dongan Hills-South Beach' = 128, 'Ozone Park' = 129, 'Park Slope-Gowanus' = 130, 'Parkchester' = 131, 'Pelham Bay-Country Club-City Island' = 132, 'Pelham Parkway' = 133, 'Pomonok-Flushing Heights-Hillcrest' = 134, 'Port Richmond' = 135, 'Prospect Heights' = 136, 'Prospect Lefferts Gardens-Wingate' = 137, 'Queens Village' = 138, 'Queensboro Hill' = 139, 'Queensbridge-Ravenswood-Long Island City' = 140, 'Rego Park' = 141, 'Richmond Hill' = 142, 'Ridgewood' = 143, 'Rikers Island' = 144, 'Rosedale' = 145, 'Rossville-Woodrow' = 146, 'Rugby-Remsen Village' = 147, 'Schuylerville-Throgs Neck-Edgewater Park' = 148, 'Seagate-Coney Island' = 149, 'Sheepshead Bay-Gerritsen Beach-Manhattan Beach' = 150, 'SoHo-TriBeCa-Civic Center-Little Italy' = 151, 'Soundview-Bruckner' = 152, 'Soundview-Castle Hill-Clason Point-Harding Park' = 153, 'South Jamaica' = 154, 'South Ozone Park' = 155, 'Springfield Gardens North' = 156, 'Springfield Gardens South-Brookville' = 157, 'Spuyten Duyvil-Kingsbridge' = 158, 'St. Albans' = 159, 'Stapleton-Rosebank' = 160, 'Starrett City' = 161, 'Steinway' = 162, 'Stuyvesant Heights' = 163, 'Stuyvesant Town-Cooper Village' = 164, 'Sunset Park East' = 165, 'Sunset Park West' = 166, 'Todt Hill-Emerson Hill-Heartland Village-Lighthouse Hill' = 167, 'Turtle Bay-East Midtown' = 168, 'University Heights-Morris Heights' = 169, 'Upper East Side-Carnegie Hill' = 170, 'Upper West Side' = 171, 'Van Cortlandt Village' = 172, 'Van Nest-Morris Park-Westchester Square' = 173, 'Washington Heights North' = 174, 'Washington Heights South' = 175, 'West Brighton' = 176, 'West Concourse' = 177, 'West Farms-Bronx River' = 178, 'West New Brighton-New Brighton-St. George' = 179, 'West Village' = 180, 'Westchester-Unionport' = 181, 'Westerleigh' = 182, 'Whitestone' = 183, 'Williamsbridge-Olinville' = 184, 'Williamsburg' = 185, 'Windsor Terrace' = 186, 'Woodhaven' = 187, 'Woodlawn-Wakefield' = 188, 'Woodside' = 189, 'Yorkville' = 190, 'park-cemetery-etc-Bronx' = 191, 'park-cemetery-etc-Brooklyn' = 192, 'park-cemetery-etc-Manhattan' = 193, 'park-cemetery-etc-Queens' = 194, 'park-cemetery-etc-Staten Island' = 195)) AS pickup_ntaname, + +toUInt16(ifNull(pickup_puma, '0')) AS pickup_puma, + +assumeNotNull(dropoff_nyct2010_gid) AS dropoff_nyct2010_gid, +toFloat32(ifNull(dropoff_ctlabel, '0')) AS dropoff_ctlabel, +assumeNotNull(dropoff_borocode) AS dropoff_borocode, +CAST(assumeNotNull(dropoff_boroname) AS Enum8('Manhattan' = 1, 'Queens' = 4, 'Brooklyn' = 3, '' = 0, 'Bronx' = 2, 'Staten Island' = 5)) AS dropoff_boroname, +toFixedString(ifNull(dropoff_ct2010, '000000'), 6) AS dropoff_ct2010, +toFixedString(ifNull(dropoff_boroct2010, '0000000'), 7) AS dropoff_boroct2010, +CAST(assumeNotNull(ifNull(dropoff_cdeligibil, ' ')) AS Enum8(' ' = 0, 'E' = 1, 'I' = 2)) AS dropoff_cdeligibil, +toFixedString(ifNull(dropoff_ntacode, '0000'), 4) AS dropoff_ntacode, + +CAST(assumeNotNull(dropoff_ntaname) AS Enum16('' = 0, 'Airport' = 1, 'Allerton-Pelham Gardens' = 2, 'Annadale-Huguenot-Prince\'s Bay-Eltingville' = 3, 'Arden Heights' = 4, 'Astoria' = 5, 'Auburndale' = 6, 'Baisley Park' = 7, 'Bath Beach' = 8, 'Battery Park City-Lower Manhattan' = 9, 'Bay Ridge' = 10, 'Bayside-Bayside Hills' = 11, 'Bedford' = 12, 'Bedford Park-Fordham North' = 13, 'Bellerose' = 14, 'Belmont' = 15, 'Bensonhurst East' = 16, 'Bensonhurst West' = 17, 'Borough Park' = 18, 'Breezy Point-Belle Harbor-Rockaway Park-Broad Channel' = 19, 'Briarwood-Jamaica Hills' = 20, 'Brighton Beach' = 21, 'Bronxdale' = 22, 'Brooklyn Heights-Cobble Hill' = 23, 'Brownsville' = 24, 'Bushwick North' = 25, 'Bushwick South' = 26, 'Cambria Heights' = 27, 'Canarsie' = 28, 'Carroll Gardens-Columbia Street-Red Hook' = 29, 'Central Harlem North-Polo Grounds' = 30, 'Central Harlem South' = 31, 'Charleston-Richmond Valley-Tottenville' = 32, 'Chinatown' = 33, 'Claremont-Bathgate' = 34, 'Clinton' = 35, 'Clinton Hill' = 36, 'Co-op City' = 37, 'College Point' = 38, 'Corona' = 39, 'Crotona Park East' = 40, 'Crown Heights North' = 41, 'Crown Heights South' = 42, 'Cypress Hills-City Line' = 43, 'DUMBO-Vinegar Hill-Downtown Brooklyn-Boerum Hill' = 44, 'Douglas Manor-Douglaston-Little Neck' = 45, 'Dyker Heights' = 46, 'East Concourse-Concourse Village' = 47, 'East Elmhurst' = 48, 'East Flatbush-Farragut' = 49, 'East Flushing' = 50, 'East Harlem North' = 51, 'East Harlem South' = 52, 'East New York' = 53, 'East New York (Pennsylvania Ave)' = 54, 'East Tremont' = 55, 'East Village' = 56, 'East Williamsburg' = 57, 'Eastchester-Edenwald-Baychester' = 58, 'Elmhurst' = 59, 'Elmhurst-Maspeth' = 60, 'Erasmus' = 61, 'Far Rockaway-Bayswater' = 62, 'Flatbush' = 63, 'Flatlands' = 64, 'Flushing' = 65, 'Fordham South' = 66, 'Forest Hills' = 67, 'Fort Greene' = 68, 'Fresh Meadows-Utopia' = 69, 'Ft. Totten-Bay Terrace-Clearview' = 70, 'Georgetown-Marine Park-Bergen Beach-Mill Basin' = 71, 'Glen Oaks-Floral Park-New Hyde Park' = 72, 'Glendale' = 73, 'Gramercy' = 74, 'Grasmere-Arrochar-Ft. Wadsworth' = 75, 'Gravesend' = 76, 'Great Kills' = 77, 'Greenpoint' = 78, 'Grymes Hill-Clifton-Fox Hills' = 79, 'Hamilton Heights' = 80, 'Hammels-Arverne-Edgemere' = 81, 'Highbridge' = 82, 'Hollis' = 83, 'Homecrest' = 84, 'Hudson Yards-Chelsea-Flatiron-Union Square' = 85, 'Hunters Point-Sunnyside-West Maspeth' = 86, 'Hunts Point' = 87, 'Jackson Heights' = 88, 'Jamaica' = 89, 'Jamaica Estates-Holliswood' = 90, 'Kensington-Ocean Parkway' = 91, 'Kew Gardens' = 92, 'Kew Gardens Hills' = 93, 'Kingsbridge Heights' = 94, 'Laurelton' = 95, 'Lenox Hill-Roosevelt Island' = 96, 'Lincoln Square' = 97, 'Lindenwood-Howard Beach' = 98, 'Longwood' = 99, 'Lower East Side' = 100, 'Madison' = 101, 'Manhattanville' = 102, 'Marble Hill-Inwood' = 103, 'Mariner\'s Harbor-Arlington-Port Ivory-Graniteville' = 104, 'Maspeth' = 105, 'Melrose South-Mott Haven North' = 106, 'Middle Village' = 107, 'Midtown-Midtown South' = 108, 'Midwood' = 109, 'Morningside Heights' = 110, 'Morrisania-Melrose' = 111, 'Mott Haven-Port Morris' = 112, 'Mount Hope' = 113, 'Murray Hill' = 114, 'Murray Hill-Kips Bay' = 115, 'New Brighton-Silver Lake' = 116, 'New Dorp-Midland Beach' = 117, 'New Springville-Bloomfield-Travis' = 118, 'North Corona' = 119, 'North Riverdale-Fieldston-Riverdale' = 120, 'North Side-South Side' = 121, 'Norwood' = 122, 'Oakland Gardens' = 123, 'Oakwood-Oakwood Beach' = 124, 'Ocean Hill' = 125, 'Ocean Parkway South' = 126, 'Old Astoria' = 127, 'Old Town-Dongan Hills-South Beach' = 128, 'Ozone Park' = 129, 'Park Slope-Gowanus' = 130, 'Parkchester' = 131, 'Pelham Bay-Country Club-City Island' = 132, 'Pelham Parkway' = 133, 'Pomonok-Flushing Heights-Hillcrest' = 134, 'Port Richmond' = 135, 'Prospect Heights' = 136, 'Prospect Lefferts Gardens-Wingate' = 137, 'Queens Village' = 138, 'Queensboro Hill' = 139, 'Queensbridge-Ravenswood-Long Island City' = 140, 'Rego Park' = 141, 'Richmond Hill' = 142, 'Ridgewood' = 143, 'Rikers Island' = 144, 'Rosedale' = 145, 'Rossville-Woodrow' = 146, 'Rugby-Remsen Village' = 147, 'Schuylerville-Throgs Neck-Edgewater Park' = 148, 'Seagate-Coney Island' = 149, 'Sheepshead Bay-Gerritsen Beach-Manhattan Beach' = 150, 'SoHo-TriBeCa-Civic Center-Little Italy' = 151, 'Soundview-Bruckner' = 152, 'Soundview-Castle Hill-Clason Point-Harding Park' = 153, 'South Jamaica' = 154, 'South Ozone Park' = 155, 'Springfield Gardens North' = 156, 'Springfield Gardens South-Brookville' = 157, 'Spuyten Duyvil-Kingsbridge' = 158, 'St. Albans' = 159, 'Stapleton-Rosebank' = 160, 'Starrett City' = 161, 'Steinway' = 162, 'Stuyvesant Heights' = 163, 'Stuyvesant Town-Cooper Village' = 164, 'Sunset Park East' = 165, 'Sunset Park West' = 166, 'Todt Hill-Emerson Hill-Heartland Village-Lighthouse Hill' = 167, 'Turtle Bay-East Midtown' = 168, 'University Heights-Morris Heights' = 169, 'Upper East Side-Carnegie Hill' = 170, 'Upper West Side' = 171, 'Van Cortlandt Village' = 172, 'Van Nest-Morris Park-Westchester Square' = 173, 'Washington Heights North' = 174, 'Washington Heights South' = 175, 'West Brighton' = 176, 'West Concourse' = 177, 'West Farms-Bronx River' = 178, 'West New Brighton-New Brighton-St. George' = 179, 'West Village' = 180, 'Westchester-Unionport' = 181, 'Westerleigh' = 182, 'Whitestone' = 183, 'Williamsbridge-Olinville' = 184, 'Williamsburg' = 185, 'Windsor Terrace' = 186, 'Woodhaven' = 187, 'Woodlawn-Wakefield' = 188, 'Woodside' = 189, 'Yorkville' = 190, 'park-cemetery-etc-Bronx' = 191, 'park-cemetery-etc-Brooklyn' = 192, 'park-cemetery-etc-Manhattan' = 193, 'park-cemetery-etc-Queens' = 194, 'park-cemetery-etc-Staten Island' = 195)) AS dropoff_ntaname, + +toUInt16(ifNull(dropoff_puma, '0')) AS dropoff_puma + +FROM trips +``` + +Cela prend 3030 secondes à une vitesse d'environ 428 000 lignes par seconde. +Pour le charger plus rapidement, vous pouvez créer la table avec le `Log` le moteur de `MergeTree`. Dans ce cas, le téléchargement fonctionne plus rapidement que 200 secondes. + +La table utilise 126 GO d'espace disque. + +``` sql +SELECT formatReadableSize(sum(bytes)) FROM system.parts WHERE table = 'trips_mergetree' AND active +``` + +``` text +┌─formatReadableSize(sum(bytes))─┐ +│ 126.18 GiB │ +└────────────────────────────────┘ +``` + +Entre autres choses, vous pouvez exécuter la requête OPTIMIZE sur MergeTree. Mais ce n'est pas nécessaire puisque tout ira bien sans elle. + +## Téléchargement des Partitions préparées {#download-of-prepared-partitions} + +``` bash +$ curl -O https://clickhouse-datasets.s3.yandex.net/trips_mergetree/partitions/trips_mergetree.tar +$ tar xvf trips_mergetree.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.trips_mergetree" +``` + +!!! info "Info" + Si vous exécutez les requêtes décrites ci-dessous, vous devez utiliser le nom complet de la table, `datasets.trips_mergetree`. + +## Résultats sur un seul serveur {#results-on-single-server} + +Q1: + +``` sql +SELECT cab_type, count(*) FROM trips_mergetree GROUP BY cab_type +``` + +0.490 secondes. + +Q2: + +``` sql +SELECT passenger_count, avg(total_amount) FROM trips_mergetree GROUP BY passenger_count +``` + +1.224 secondes. + +Q3: + +``` sql +SELECT passenger_count, toYear(pickup_date) AS year, count(*) FROM trips_mergetree GROUP BY passenger_count, year +``` + +2.104 secondes. + +Q4: + +``` sql +SELECT passenger_count, toYear(pickup_date) AS year, round(trip_distance) AS distance, count(*) +FROM trips_mergetree +GROUP BY passenger_count, year, distance +ORDER BY year, count(*) DESC +``` + +3.593 secondes. + +Le serveur suivant a été utilisé: + +Deux Intel (R) Xeon (R) CPU E5-2650 v2 @ 2.60 GHz, 16 noyaux physiques total, 128 GiB RAM, 8x6 TB HD sur le matériel RAID-5 + +Temps d'exécution est le meilleur des trois pistes. Mais à partir de la deuxième exécution, les requêtes lisent les données du cache du système de fichiers. Aucune autre mise en cache ne se produit: les données sont lues et traitées à chaque exécution. + +La création d'un tableau sur trois serveurs: + +Sur chaque serveur: + +``` sql +CREATE TABLE default.trips_mergetree_third ( trip_id UInt32, vendor_id Enum8('1' = 1, '2' = 2, 'CMT' = 3, 'VTS' = 4, 'DDS' = 5, 'B02512' = 10, 'B02598' = 11, 'B02617' = 12, 'B02682' = 13, 'B02764' = 14), pickup_date Date, pickup_datetime DateTime, dropoff_date Date, dropoff_datetime DateTime, store_and_fwd_flag UInt8, rate_code_id UInt8, pickup_longitude Float64, pickup_latitude Float64, dropoff_longitude Float64, dropoff_latitude Float64, passenger_count UInt8, trip_distance Float64, fare_amount Float32, extra Float32, mta_tax Float32, tip_amount Float32, tolls_amount Float32, ehail_fee Float32, improvement_surcharge Float32, total_amount Float32, payment_type_ Enum8('UNK' = 0, 'CSH' = 1, 'CRE' = 2, 'NOC' = 3, 'DIS' = 4), trip_type UInt8, pickup FixedString(25), dropoff FixedString(25), cab_type Enum8('yellow' = 1, 'green' = 2, 'uber' = 3), pickup_nyct2010_gid UInt8, pickup_ctlabel Float32, pickup_borocode UInt8, pickup_boroname Enum8('' = 0, 'Manhattan' = 1, 'Bronx' = 2, 'Brooklyn' = 3, 'Queens' = 4, 'Staten Island' = 5), pickup_ct2010 FixedString(6), pickup_boroct2010 FixedString(7), pickup_cdeligibil Enum8(' ' = 0, 'E' = 1, 'I' = 2), pickup_ntacode FixedString(4), pickup_ntaname Enum16('' = 0, 'Airport' = 1, 'Allerton-Pelham Gardens' = 2, 'Annadale-Huguenot-Prince\'s Bay-Eltingville' = 3, 'Arden Heights' = 4, 'Astoria' = 5, 'Auburndale' = 6, 'Baisley Park' = 7, 'Bath Beach' = 8, 'Battery Park City-Lower Manhattan' = 9, 'Bay Ridge' = 10, 'Bayside-Bayside Hills' = 11, 'Bedford' = 12, 'Bedford Park-Fordham North' = 13, 'Bellerose' = 14, 'Belmont' = 15, 'Bensonhurst East' = 16, 'Bensonhurst West' = 17, 'Borough Park' = 18, 'Breezy Point-Belle Harbor-Rockaway Park-Broad Channel' = 19, 'Briarwood-Jamaica Hills' = 20, 'Brighton Beach' = 21, 'Bronxdale' = 22, 'Brooklyn Heights-Cobble Hill' = 23, 'Brownsville' = 24, 'Bushwick North' = 25, 'Bushwick South' = 26, 'Cambria Heights' = 27, 'Canarsie' = 28, 'Carroll Gardens-Columbia Street-Red Hook' = 29, 'Central Harlem North-Polo Grounds' = 30, 'Central Harlem South' = 31, 'Charleston-Richmond Valley-Tottenville' = 32, 'Chinatown' = 33, 'Claremont-Bathgate' = 34, 'Clinton' = 35, 'Clinton Hill' = 36, 'Co-op City' = 37, 'College Point' = 38, 'Corona' = 39, 'Crotona Park East' = 40, 'Crown Heights North' = 41, 'Crown Heights South' = 42, 'Cypress Hills-City Line' = 43, 'DUMBO-Vinegar Hill-Downtown Brooklyn-Boerum Hill' = 44, 'Douglas Manor-Douglaston-Little Neck' = 45, 'Dyker Heights' = 46, 'East Concourse-Concourse Village' = 47, 'East Elmhurst' = 48, 'East Flatbush-Farragut' = 49, 'East Flushing' = 50, 'East Harlem North' = 51, 'East Harlem South' = 52, 'East New York' = 53, 'East New York (Pennsylvania Ave)' = 54, 'East Tremont' = 55, 'East Village' = 56, 'East Williamsburg' = 57, 'Eastchester-Edenwald-Baychester' = 58, 'Elmhurst' = 59, 'Elmhurst-Maspeth' = 60, 'Erasmus' = 61, 'Far Rockaway-Bayswater' = 62, 'Flatbush' = 63, 'Flatlands' = 64, 'Flushing' = 65, 'Fordham South' = 66, 'Forest Hills' = 67, 'Fort Greene' = 68, 'Fresh Meadows-Utopia' = 69, 'Ft. Totten-Bay Terrace-Clearview' = 70, 'Georgetown-Marine Park-Bergen Beach-Mill Basin' = 71, 'Glen Oaks-Floral Park-New Hyde Park' = 72, 'Glendale' = 73, 'Gramercy' = 74, 'Grasmere-Arrochar-Ft. Wadsworth' = 75, 'Gravesend' = 76, 'Great Kills' = 77, 'Greenpoint' = 78, 'Grymes Hill-Clifton-Fox Hills' = 79, 'Hamilton Heights' = 80, 'Hammels-Arverne-Edgemere' = 81, 'Highbridge' = 82, 'Hollis' = 83, 'Homecrest' = 84, 'Hudson Yards-Chelsea-Flatiron-Union Square' = 85, 'Hunters Point-Sunnyside-West Maspeth' = 86, 'Hunts Point' = 87, 'Jackson Heights' = 88, 'Jamaica' = 89, 'Jamaica Estates-Holliswood' = 90, 'Kensington-Ocean Parkway' = 91, 'Kew Gardens' = 92, 'Kew Gardens Hills' = 93, 'Kingsbridge Heights' = 94, 'Laurelton' = 95, 'Lenox Hill-Roosevelt Island' = 96, 'Lincoln Square' = 97, 'Lindenwood-Howard Beach' = 98, 'Longwood' = 99, 'Lower East Side' = 100, 'Madison' = 101, 'Manhattanville' = 102, 'Marble Hill-Inwood' = 103, 'Mariner\'s Harbor-Arlington-Port Ivory-Graniteville' = 104, 'Maspeth' = 105, 'Melrose South-Mott Haven North' = 106, 'Middle Village' = 107, 'Midtown-Midtown South' = 108, 'Midwood' = 109, 'Morningside Heights' = 110, 'Morrisania-Melrose' = 111, 'Mott Haven-Port Morris' = 112, 'Mount Hope' = 113, 'Murray Hill' = 114, 'Murray Hill-Kips Bay' = 115, 'New Brighton-Silver Lake' = 116, 'New Dorp-Midland Beach' = 117, 'New Springville-Bloomfield-Travis' = 118, 'North Corona' = 119, 'North Riverdale-Fieldston-Riverdale' = 120, 'North Side-South Side' = 121, 'Norwood' = 122, 'Oakland Gardens' = 123, 'Oakwood-Oakwood Beach' = 124, 'Ocean Hill' = 125, 'Ocean Parkway South' = 126, 'Old Astoria' = 127, 'Old Town-Dongan Hills-South Beach' = 128, 'Ozone Park' = 129, 'Park Slope-Gowanus' = 130, 'Parkchester' = 131, 'Pelham Bay-Country Club-City Island' = 132, 'Pelham Parkway' = 133, 'Pomonok-Flushing Heights-Hillcrest' = 134, 'Port Richmond' = 135, 'Prospect Heights' = 136, 'Prospect Lefferts Gardens-Wingate' = 137, 'Queens Village' = 138, 'Queensboro Hill' = 139, 'Queensbridge-Ravenswood-Long Island City' = 140, 'Rego Park' = 141, 'Richmond Hill' = 142, 'Ridgewood' = 143, 'Rikers Island' = 144, 'Rosedale' = 145, 'Rossville-Woodrow' = 146, 'Rugby-Remsen Village' = 147, 'Schuylerville-Throgs Neck-Edgewater Park' = 148, 'Seagate-Coney Island' = 149, 'Sheepshead Bay-Gerritsen Beach-Manhattan Beach' = 150, 'SoHo-TriBeCa-Civic Center-Little Italy' = 151, 'Soundview-Bruckner' = 152, 'Soundview-Castle Hill-Clason Point-Harding Park' = 153, 'South Jamaica' = 154, 'South Ozone Park' = 155, 'Springfield Gardens North' = 156, 'Springfield Gardens South-Brookville' = 157, 'Spuyten Duyvil-Kingsbridge' = 158, 'St. Albans' = 159, 'Stapleton-Rosebank' = 160, 'Starrett City' = 161, 'Steinway' = 162, 'Stuyvesant Heights' = 163, 'Stuyvesant Town-Cooper Village' = 164, 'Sunset Park East' = 165, 'Sunset Park West' = 166, 'Todt Hill-Emerson Hill-Heartland Village-Lighthouse Hill' = 167, 'Turtle Bay-East Midtown' = 168, 'University Heights-Morris Heights' = 169, 'Upper East Side-Carnegie Hill' = 170, 'Upper West Side' = 171, 'Van Cortlandt Village' = 172, 'Van Nest-Morris Park-Westchester Square' = 173, 'Washington Heights North' = 174, 'Washington Heights South' = 175, 'West Brighton' = 176, 'West Concourse' = 177, 'West Farms-Bronx River' = 178, 'West New Brighton-New Brighton-St. George' = 179, 'West Village' = 180, 'Westchester-Unionport' = 181, 'Westerleigh' = 182, 'Whitestone' = 183, 'Williamsbridge-Olinville' = 184, 'Williamsburg' = 185, 'Windsor Terrace' = 186, 'Woodhaven' = 187, 'Woodlawn-Wakefield' = 188, 'Woodside' = 189, 'Yorkville' = 190, 'park-cemetery-etc-Bronx' = 191, 'park-cemetery-etc-Brooklyn' = 192, 'park-cemetery-etc-Manhattan' = 193, 'park-cemetery-etc-Queens' = 194, 'park-cemetery-etc-Staten Island' = 195), pickup_puma UInt16, dropoff_nyct2010_gid UInt8, dropoff_ctlabel Float32, dropoff_borocode UInt8, dropoff_boroname Enum8('' = 0, 'Manhattan' = 1, 'Bronx' = 2, 'Brooklyn' = 3, 'Queens' = 4, 'Staten Island' = 5), dropoff_ct2010 FixedString(6), dropoff_boroct2010 FixedString(7), dropoff_cdeligibil Enum8(' ' = 0, 'E' = 1, 'I' = 2), dropoff_ntacode FixedString(4), dropoff_ntaname Enum16('' = 0, 'Airport' = 1, 'Allerton-Pelham Gardens' = 2, 'Annadale-Huguenot-Prince\'s Bay-Eltingville' = 3, 'Arden Heights' = 4, 'Astoria' = 5, 'Auburndale' = 6, 'Baisley Park' = 7, 'Bath Beach' = 8, 'Battery Park City-Lower Manhattan' = 9, 'Bay Ridge' = 10, 'Bayside-Bayside Hills' = 11, 'Bedford' = 12, 'Bedford Park-Fordham North' = 13, 'Bellerose' = 14, 'Belmont' = 15, 'Bensonhurst East' = 16, 'Bensonhurst West' = 17, 'Borough Park' = 18, 'Breezy Point-Belle Harbor-Rockaway Park-Broad Channel' = 19, 'Briarwood-Jamaica Hills' = 20, 'Brighton Beach' = 21, 'Bronxdale' = 22, 'Brooklyn Heights-Cobble Hill' = 23, 'Brownsville' = 24, 'Bushwick North' = 25, 'Bushwick South' = 26, 'Cambria Heights' = 27, 'Canarsie' = 28, 'Carroll Gardens-Columbia Street-Red Hook' = 29, 'Central Harlem North-Polo Grounds' = 30, 'Central Harlem South' = 31, 'Charleston-Richmond Valley-Tottenville' = 32, 'Chinatown' = 33, 'Claremont-Bathgate' = 34, 'Clinton' = 35, 'Clinton Hill' = 36, 'Co-op City' = 37, 'College Point' = 38, 'Corona' = 39, 'Crotona Park East' = 40, 'Crown Heights North' = 41, 'Crown Heights South' = 42, 'Cypress Hills-City Line' = 43, 'DUMBO-Vinegar Hill-Downtown Brooklyn-Boerum Hill' = 44, 'Douglas Manor-Douglaston-Little Neck' = 45, 'Dyker Heights' = 46, 'East Concourse-Concourse Village' = 47, 'East Elmhurst' = 48, 'East Flatbush-Farragut' = 49, 'East Flushing' = 50, 'East Harlem North' = 51, 'East Harlem South' = 52, 'East New York' = 53, 'East New York (Pennsylvania Ave)' = 54, 'East Tremont' = 55, 'East Village' = 56, 'East Williamsburg' = 57, 'Eastchester-Edenwald-Baychester' = 58, 'Elmhurst' = 59, 'Elmhurst-Maspeth' = 60, 'Erasmus' = 61, 'Far Rockaway-Bayswater' = 62, 'Flatbush' = 63, 'Flatlands' = 64, 'Flushing' = 65, 'Fordham South' = 66, 'Forest Hills' = 67, 'Fort Greene' = 68, 'Fresh Meadows-Utopia' = 69, 'Ft. Totten-Bay Terrace-Clearview' = 70, 'Georgetown-Marine Park-Bergen Beach-Mill Basin' = 71, 'Glen Oaks-Floral Park-New Hyde Park' = 72, 'Glendale' = 73, 'Gramercy' = 74, 'Grasmere-Arrochar-Ft. Wadsworth' = 75, 'Gravesend' = 76, 'Great Kills' = 77, 'Greenpoint' = 78, 'Grymes Hill-Clifton-Fox Hills' = 79, 'Hamilton Heights' = 80, 'Hammels-Arverne-Edgemere' = 81, 'Highbridge' = 82, 'Hollis' = 83, 'Homecrest' = 84, 'Hudson Yards-Chelsea-Flatiron-Union Square' = 85, 'Hunters Point-Sunnyside-West Maspeth' = 86, 'Hunts Point' = 87, 'Jackson Heights' = 88, 'Jamaica' = 89, 'Jamaica Estates-Holliswood' = 90, 'Kensington-Ocean Parkway' = 91, 'Kew Gardens' = 92, 'Kew Gardens Hills' = 93, 'Kingsbridge Heights' = 94, 'Laurelton' = 95, 'Lenox Hill-Roosevelt Island' = 96, 'Lincoln Square' = 97, 'Lindenwood-Howard Beach' = 98, 'Longwood' = 99, 'Lower East Side' = 100, 'Madison' = 101, 'Manhattanville' = 102, 'Marble Hill-Inwood' = 103, 'Mariner\'s Harbor-Arlington-Port Ivory-Graniteville' = 104, 'Maspeth' = 105, 'Melrose South-Mott Haven North' = 106, 'Middle Village' = 107, 'Midtown-Midtown South' = 108, 'Midwood' = 109, 'Morningside Heights' = 110, 'Morrisania-Melrose' = 111, 'Mott Haven-Port Morris' = 112, 'Mount Hope' = 113, 'Murray Hill' = 114, 'Murray Hill-Kips Bay' = 115, 'New Brighton-Silver Lake' = 116, 'New Dorp-Midland Beach' = 117, 'New Springville-Bloomfield-Travis' = 118, 'North Corona' = 119, 'North Riverdale-Fieldston-Riverdale' = 120, 'North Side-South Side' = 121, 'Norwood' = 122, 'Oakland Gardens' = 123, 'Oakwood-Oakwood Beach' = 124, 'Ocean Hill' = 125, 'Ocean Parkway South' = 126, 'Old Astoria' = 127, 'Old Town-Dongan Hills-South Beach' = 128, 'Ozone Park' = 129, 'Park Slope-Gowanus' = 130, 'Parkchester' = 131, 'Pelham Bay-Country Club-City Island' = 132, 'Pelham Parkway' = 133, 'Pomonok-Flushing Heights-Hillcrest' = 134, 'Port Richmond' = 135, 'Prospect Heights' = 136, 'Prospect Lefferts Gardens-Wingate' = 137, 'Queens Village' = 138, 'Queensboro Hill' = 139, 'Queensbridge-Ravenswood-Long Island City' = 140, 'Rego Park' = 141, 'Richmond Hill' = 142, 'Ridgewood' = 143, 'Rikers Island' = 144, 'Rosedale' = 145, 'Rossville-Woodrow' = 146, 'Rugby-Remsen Village' = 147, 'Schuylerville-Throgs Neck-Edgewater Park' = 148, 'Seagate-Coney Island' = 149, 'Sheepshead Bay-Gerritsen Beach-Manhattan Beach' = 150, 'SoHo-TriBeCa-Civic Center-Little Italy' = 151, 'Soundview-Bruckner' = 152, 'Soundview-Castle Hill-Clason Point-Harding Park' = 153, 'South Jamaica' = 154, 'South Ozone Park' = 155, 'Springfield Gardens North' = 156, 'Springfield Gardens South-Brookville' = 157, 'Spuyten Duyvil-Kingsbridge' = 158, 'St. Albans' = 159, 'Stapleton-Rosebank' = 160, 'Starrett City' = 161, 'Steinway' = 162, 'Stuyvesant Heights' = 163, 'Stuyvesant Town-Cooper Village' = 164, 'Sunset Park East' = 165, 'Sunset Park West' = 166, 'Todt Hill-Emerson Hill-Heartland Village-Lighthouse Hill' = 167, 'Turtle Bay-East Midtown' = 168, 'University Heights-Morris Heights' = 169, 'Upper East Side-Carnegie Hill' = 170, 'Upper West Side' = 171, 'Van Cortlandt Village' = 172, 'Van Nest-Morris Park-Westchester Square' = 173, 'Washington Heights North' = 174, 'Washington Heights South' = 175, 'West Brighton' = 176, 'West Concourse' = 177, 'West Farms-Bronx River' = 178, 'West New Brighton-New Brighton-St. George' = 179, 'West Village' = 180, 'Westchester-Unionport' = 181, 'Westerleigh' = 182, 'Whitestone' = 183, 'Williamsbridge-Olinville' = 184, 'Williamsburg' = 185, 'Windsor Terrace' = 186, 'Woodhaven' = 187, 'Woodlawn-Wakefield' = 188, 'Woodside' = 189, 'Yorkville' = 190, 'park-cemetery-etc-Bronx' = 191, 'park-cemetery-etc-Brooklyn' = 192, 'park-cemetery-etc-Manhattan' = 193, 'park-cemetery-etc-Queens' = 194, 'park-cemetery-etc-Staten Island' = 195), dropoff_puma UInt16) ENGINE = MergeTree(pickup_date, pickup_datetime, 8192) +``` + +Sur le serveur source: + +``` sql +CREATE TABLE trips_mergetree_x3 AS trips_mergetree_third ENGINE = Distributed(perftest, default, trips_mergetree_third, rand()) +``` + +La requête suivante redistribue les données: + +``` sql +INSERT INTO trips_mergetree_x3 SELECT * FROM trips_mergetree +``` + +Cela prend 2454 secondes. + +Sur les trois serveurs: + +Q1: 0.212 secondes. +Q2: 0.438 secondes. +Q3: 0.733 secondes. +Q4: 1.241 secondes. + +Pas de surprise ici, depuis les requêtes sont réparties linéairement. + +Nous avons également les résultats d'un cluster de 140 serveurs: + +Q1: 0,028 sec. +Q2: 0,043 sec. +Q3: 0,051 sec. +Q4: 0,072 sec. + +Dans ce cas, le temps de traitement des requêtes est déterminé surtout par la latence du réseau. +Nous avons exécuté des requêtes en utilisant un client situé dans un centre de données Yandex en Finlande sur un cluster en Russie, ce qui a ajouté environ 20 ms de latence. + +## Résumé {#summary} + +| serveur | Q1 | Q2 | Q3 | Q4 | +|---------|-------|-------|-------|-------| +| 1 | 0.490 | 1.224 | 2.104 | 3.593 | +| 3 | 0.212 | 0.438 | 0.733 | 1.241 | +| 140 | 0.028 | 0.043 | 0.051 | 0.072 | + +[Article Original](https://clickhouse.tech/docs/en/getting_started/example_datasets/nyc_taxi/) diff --git a/docs/fr/getting_started/example_datasets/ontime.md b/docs/fr/getting_started/example_datasets/ontime.md new file mode 100644 index 00000000000..ffb3845a49c --- /dev/null +++ b/docs/fr/getting_started/example_datasets/ontime.md @@ -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/) diff --git a/docs/fr/getting_started/example_datasets/star_schema.md b/docs/fr/getting_started/example_datasets/star_schema.md new file mode 100644 index 00000000000..5c98762648b --- /dev/null +++ b/docs/fr/getting_started/example_datasets/star_schema.md @@ -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/) diff --git a/docs/fr/getting_started/example_datasets/wikistat.md b/docs/fr/getting_started/example_datasets/wikistat.md new file mode 100644 index 00000000000..6b8ab4ae28d --- /dev/null +++ b/docs/fr/getting_started/example_datasets/wikistat.md @@ -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/) diff --git a/docs/fr/getting_started/index.md b/docs/fr/getting_started/index.md new file mode 100644 index 00000000000..62f11602e64 --- /dev/null +++ b/docs/fr/getting_started/index.md @@ -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/) diff --git a/docs/fr/getting_started/install.md b/docs/fr/getting_started/install.md new file mode 100644 index 00000000000..4ceb4deb796 --- /dev/null +++ b/docs/fr/getting_started/install.md @@ -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/) diff --git a/docs/fr/getting_started/playground.md b/docs/fr/getting_started/playground.md new file mode 100644 index 00000000000..99cbd7b5747 --- /dev/null +++ b/docs/fr/getting_started/playground.md @@ -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" +``` diff --git a/docs/fr/getting_started/tutorial.md b/docs/fr/getting_started/tutorial.md new file mode 100644 index 00000000000..bb36508efd0 --- /dev/null +++ b/docs/fr/getting_started/tutorial.md @@ -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 `` é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!";`. + +
+ +Conseils rapides pour clickhouse-client +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 +``` + +
+ +## 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 + + + + + example-perftest01j.yandex.ru + 9000 + + + + + example-perftest02j.yandex.ru + 9000 + + + + + example-perftest03j.yandex.ru + 9000 + + + + +``` + +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 + + ... + + + + example-perftest01j.yandex.ru + 9000 + + + example-perftest02j.yandex.ru + 9000 + + + example-perftest03j.yandex.ru + 9000 + + + + +``` + +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 + + + zoo01.yandex.ru + 2181 + + + zoo02.yandex.ru + 2181 + + + zoo03.yandex.ru + 2181 + + +``` + +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 + + 01 + 01 + +``` + +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/) diff --git a/docs/fr/guides/apply_catboost_model.md b/docs/fr/guides/apply_catboost_model.md new file mode 100644 index 00000000000..613de6371cb --- /dev/null +++ b/docs/fr/guides/apply_catboost_model.md @@ -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.` 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 + + + + catboost + + amazon + + /home/catboost/tutorial/catboost_model.bin + + 0 + + +``` + +**6.** Ajoutez le chemin D'accès à CatBoost et la configuration du modèle à la configuration de ClickHouse: + +``` xml + +/home/catboost/data/libcatboostmodel.so +/home/catboost/models/*_model.xml +``` + +## 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/) diff --git a/docs/fr/guides/index.md b/docs/fr/guides/index.md new file mode 100644 index 00000000000..57a705f7e86 --- /dev/null +++ b/docs/fr/guides/index.md @@ -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/) diff --git a/docs/fr/images b/docs/fr/images new file mode 120000 index 00000000000..73937c941ec --- /dev/null +++ b/docs/fr/images @@ -0,0 +1 @@ +../en/images \ No newline at end of file diff --git a/docs/fr/index.md b/docs/fr/index.md new file mode 100644 index 00000000000..75cb70e21e6 --- /dev/null +++ b/docs/fr/index.md @@ -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. + +
+ +Exemple + +``` 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 │ +└───────────┴──────────┘ +``` + +
+ +### 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/) ##} diff --git a/docs/fr/interfaces/cli.md b/docs/fr/interfaces/cli.md new file mode 100644 index 00000000000..84318bbb50a --- /dev/null +++ b/docs/fr/interfaces/cli.md @@ -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` — Placeholder identifier. In the console client it should be used in app parameters as `--param_ = 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_` — 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 + + username + password + False + +``` + +[Article Original](https://clickhouse.tech/docs/en/interfaces/cli/) diff --git a/docs/fr/interfaces/cpp.md b/docs/fr/interfaces/cpp.md new file mode 100644 index 00000000000..ecf3ca349c4 --- /dev/null +++ b/docs/fr/interfaces/cpp.md @@ -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/) diff --git a/docs/fr/interfaces/formats.md b/docs/fr/interfaces/formats.md new file mode 100644 index 00000000000..5f5b693b550 --- /dev/null +++ b/docs/fr/interfaces/formats.md @@ -0,0 +1,1209 @@ +--- +machine_translated: true +--- + +# Formats pour les données D'entrée et de sortie {#formats} + +ClickHouse peut accepter et renvoyer des données dans différents formats. Un format pris en charge pour l'entrée peut être utilisée pour analyser les données fournies à `INSERT`s, pour effectuer `SELECT`s à partir d'une table sauvegardée par fichier, telle Qu'un fichier, une URL ou un HDFS, ou pour lire un dictionnaire externe. Un format pris en charge pour la sortie peut être utilisé pour organiser +les résultats d'une `SELECT` et pour effectuer `INSERT`s dans une table sauvegardée par fichier. + +Les formats pris en charge sont: + +| Format | Entrée | Sortie | +|-----------------------------------------------------------------|--------|--------| +| [TabSeparated](#tabseparated) | ✔ | ✔ | +| [TabSeparatedRaw](#tabseparatedraw) | ✗ | ✔ | +| [TabSeparatedWithNames](#tabseparatedwithnames) | ✔ | ✔ | +| [TabSeparatedWithNamesAndTypes](#tabseparatedwithnamesandtypes) | ✔ | ✔ | +| [Modèle](#format-template) | ✔ | ✔ | +| [TemplateIgnoreSpaces](#templateignorespaces) | ✔ | ✗ | +| [CSV](#csv) | ✔ | ✔ | +| [CSVWithNames](#csvwithnames) | ✔ | ✔ | +| [CustomSeparated](#format-customseparated) | ✔ | ✔ | +| [Valeur](#data-format-values) | ✔ | ✔ | +| [Vertical](#vertical) | ✗ | ✔ | +| [VerticalRaw](#verticalraw) | ✗ | ✔ | +| [JSON](#json) | ✗ | ✔ | +| [JSONCompact](#jsoncompact) | ✗ | ✔ | +| [JSONEachRow](#jsoneachrow) | ✔ | ✔ | +| [TSKV](#tskv) | ✔ | ✔ | +| [Joli](#pretty) | ✗ | ✔ | +| [PrettyCompact](#prettycompact) | ✗ | ✔ | +| [PrettyCompactMonoBlock](#prettycompactmonoblock) | ✗ | ✔ | +| [PrettyNoEscapes](#prettynoescapes) | ✗ | ✔ | +| [PrettySpace](#prettyspace) | ✗ | ✔ | +| [Protobuf](#protobuf) | ✔ | ✔ | +| [Avro](#data-format-avro) | ✔ | ✔ | +| [AvroConfluent](#data-format-avro-confluent) | ✔ | ✗ | +| [Parquet](#data-format-parquet) | ✔ | ✔ | +| [ORC](#data-format-orc) | ✔ | ✗ | +| [RowBinary](#rowbinary) | ✔ | ✔ | +| [Rowbinarywithnamesettypes](#rowbinarywithnamesandtypes) | ✔ | ✔ | +| [Natif](#native) | ✔ | ✔ | +| [NULL](#null) | ✗ | ✔ | +| [XML](#xml) | ✗ | ✔ | +| [CapnProto](#capnproto) | ✔ | ✗ | + +Vous pouvez contrôler certains paramètres de traitement de format avec les paramètres ClickHouse. Pour plus d'informations, lisez le [Paramètre](../operations/settings/settings.md) section. + +## TabSeparated {#tabseparated} + +Au format TabSeparated, les données sont écrites par ligne. Chaque ligne contient des valeurs séparées par des onglets. Chaque valeur est suivie par un onglet, à l'exception de la dernière valeur dans la ligne, qui est suivi par un saut de ligne. Les flux de ligne strictement Unix sont supposés partout. La dernière ligne doit également contenir un saut de ligne à la fin. Les valeurs sont écrites au format texte, sans guillemets et avec des caractères spéciaux échappés. + +Ce format est également disponible sous le nom de `TSV`. + +Le `TabSeparated` le format est pratique pour le traitement des données à l'aide de programmes et de scripts personnalisés. Il est utilisé par défaut dans L'interface HTTP et dans le mode batch du client de ligne de commande. Ce format permet également de transférer des données entre différents SGBD. Par exemple, vous pouvez obtenir un dump de MySQL et le télécharger sur ClickHouse, ou vice versa. + +Le `TabSeparated` format prend en charge la sortie des valeurs totales (lors de L'utilisation avec des totaux) et des valeurs extrêmes (lorsque ‘extremes’ est réglé sur 1). Dans ces cas, les valeurs totales et les extrêmes sont sorties après les données principales. Le résultat principal, les valeurs totales et les extrêmes sont séparés les uns des autres par une ligne vide. Exemple: + +``` sql +SELECT EventDate, count() AS c FROM test.hits GROUP BY EventDate WITH TOTALS ORDER BY EventDate FORMAT TabSeparated`` +``` + +``` text +2014-03-17 1406958 +2014-03-18 1383658 +2014-03-19 1405797 +2014-03-20 1353623 +2014-03-21 1245779 +2014-03-22 1031592 +2014-03-23 1046491 + +0000-00-00 8873898 + +2014-03-17 1031592 +2014-03-23 1406958 +``` + +### Mise En Forme Des Données {#data-formatting} + +Les nombres entiers sont écrits sous forme décimale. Les numéros peuvent contenir un supplément “+” caractère au début (ignoré lors de l'analyse, et non enregistré lors du formatage). Les nombres non négatifs ne peuvent pas contenir le signe négatif. Lors de la lecture, il est permis d'analyser une chaîne vide en tant que zéro, ou (pour les types signés) une chaîne composée d'un signe moins en tant que zéro. Les nombres qui ne correspondent pas au type de données correspondant peuvent être analysés comme un nombre différent, sans message d'erreur. + +Les nombres à virgule flottante sont écrits sous forme décimale. Le point est utilisé comme séparateur décimal. Les entrées exponentielles sont prises en charge, tout comme ‘inf’, ‘+inf’, ‘-inf’, et ‘nan’. Une entrée de nombres à virgule flottante peut commencer ou se terminer par une virgule décimale. +Pendant le formatage, la précision peut être perdue sur les nombres à virgule flottante. +Pendant l'analyse, il n'est pas strictement nécessaire de lire le nombre représentable de la machine le plus proche. + +Les Dates sont écrites au format AAAA-MM-JJ et analysées dans le même format, mais avec tous les caractères comme séparateurs. +Les Dates avec les heures sont écrites dans le format `YYYY-MM-DD hh:mm:ss` et analysé dans le même format, mais avec des caractères comme séparateurs. +Tout cela se produit dans le fuseau horaire du système au moment où le client ou le serveur démarre (selon lequel d'entre eux formate les données). Pour les dates avec des heures, l'heure d'été n'est pas spécifiée. Donc, si un vidage a des temps pendant l'heure d'été, le vidage ne correspond pas sans équivoque aux données, et l'analyse sélectionnera l'une des deux fois. +Lors d'une opération de lecture, les dates et dates incorrectes avec des heures peuvent être analysées avec un débordement naturel ou en tant que dates et heures nulles, sans message d'erreur. + +À titre d'exception, l'analyse des dates avec des heures est également prise en charge au format d'horodatage Unix, si elle se compose exactement de 10 chiffres décimaux. Le résultat n'est pas dépendant du fuseau horaire. Les formats AAAA-MM-JJ hh:mm:ss et NNNNNNNNNN sont différenciés automatiquement. + +Les chaînes sont sorties avec des caractères spéciaux échappés par une barre oblique inverse. Les séquences d'échappement suivantes sont utilisées pour la sortie: `\b`, `\f`, `\r`, `\n`, `\t`, `\0`, `\'`, `\\`. L'analyse prend également en charge les séquences `\a`, `\v`, et `\xHH` (séquences d'échappement hexadécimales) et `\c` séquences, où `c` est un caractère (ces séquences sont convertis à `c`). Ainsi, la lecture de données prend en charge les formats où un saut de ligne peut être écrit comme `\n` ou `\` ou comme un saut de ligne. Par exemple, la chaîne `Hello world` avec un saut de ligne entre les mots au lieu de l'espace peut être analysé dans l'une des variantes suivantes: + +``` text +Hello\nworld + +Hello\ +world +``` + +La deuxième variante est prise en charge car MySQL l'utilise lors de l'écriture de vidages séparés par des tabulations. + +L'ensemble minimum de caractères que vous devez échapper lors du passage de données au format TabSeparated: tab, saut de ligne (LF) et barre oblique inverse. + +Seul un petit ensemble de symboles sont échappés. Vous pouvez facilement tomber sur une valeur de chaîne que votre terminal va ruiner en sortie. + +Les tableaux sont écrits sous la forme d'une liste de valeurs séparées par des virgules entre crochets. Le nombre d'éléments dans le tableau sont formatés comme normalement. `Date` et `DateTime` les types sont écrits entre guillemets simples. Les chaînes sont écrites entre guillemets simples avec les mêmes règles d'échappement que ci-dessus. + +[NULL](../query_language/syntax.md) est formaté en tant qu' `\N`. + +Chaque élément de [Imbriqué](../data_types/nested_data_structures/nested.md) structures est représenté sous forme de tableau. + +Exemple: + +``` sql +CREATE TABLE nestedt +( + `id` UInt8, + `aux` Nested( + a UInt8, + b String + ) +) +ENGINE = TinyLog +``` + +``` sql +INSERT INTO nestedt Values ( 1, [1], ['a']) +``` + +``` sql +SELECT * FROM nestedt FORMAT TSV +``` + +``` text +1 [1] ['a'] +``` + +## TabSeparatedRaw {#tabseparatedraw} + +Diffère de `TabSeparated` format en ce que les lignes sont écrites sans échappement. +Ce format n'est approprié que pour la sortie d'un résultat de requête, mais pas pour l'analyse (récupération des données à insérer dans une table). + +Ce format est également disponible sous le nom de `TSVRaw`. + +## TabSeparatedWithNames {#tabseparatedwithnames} + +Diffère de la `TabSeparated` formater en ce que les noms de colonne sont écrits dans la première ligne. +Pendant l'analyse, la première ligne est complètement ignorée. Vous ne pouvez pas utiliser les noms de colonnes pour déterminer leur position ou vérifier leur exactitude. +(La prise en charge de l'analyse de la ligne d'en-tête peut être ajoutée à l'avenir.) + +Ce format est également disponible sous le nom de `TSVWithNames`. + +## TabSeparatedWithNamesAndTypes {#tabseparatedwithnamesandtypes} + +Diffère de la `TabSeparated` format que les noms de colonne sont écrits à la première ligne, tandis que les types de colonne sont dans la deuxième rangée. +Pendant l'analyse, les première et deuxième lignes sont complètement ignorées. + +Ce format est également disponible sous le nom de `TSVWithNamesAndTypes`. + +## Modèle {#format-template} + +Ce format permet de spécifier une chaîne de format personnalisée avec des espaces réservés pour les valeurs avec une règle d'échappement spécifiée. + +Il utilise les paramètres `format_template_resultset`, `format_template_row`, `format_template_rows_between_delimiter` and some settings of other formats (e.g. `output_format_json_quote_64bit_integers` lors de l'utilisation de `JSON` s'échapper, voir plus loin) + +Paramètre `format_template_row` spécifie le chemin d'accès au fichier, qui contient une chaîne de format pour les lignes avec la syntaxe suivante: + +`delimiter_1${column_1:serializeAs_1}delimiter_2${column_2:serializeAs_2} ... delimiter_N`, + +où `delimiter_i` est un délimiteur entre les valeurs (`$` symbole peut être échappé comme `$$`), +`column_i` est un nom ou un index d'une colonne dont les valeurs sont choisies ou inséré (si vide, alors la colonne sera ignoré), +`serializeAs_i` est une règle d'échappement pour les valeurs de colonne. Les règles d'échappement suivantes sont prises en charge: + +- `CSV`, `JSON`, `XML` (de même pour les formats des mêmes noms) +- `Escaped` (de la même manière à `TSV`) +- `Quoted` (de la même manière à `Values`) +- `Raw` (sans s'échapper, de même pour `TSVRaw`) +- `None` (pas de règle d'échappement, voir plus loin) + +Si une règle d'échappement est omise, alors `None` sera utilisé. `XML` et `Raw` sont adaptés uniquement pour la sortie. + +Donc, pour la chaîne de format suivante: + + `Search phrase: ${SearchPhrase:Quoted}, count: ${c:Escaped}, ad price: $$${price:JSON};` + +les valeurs de `SearchPhrase`, `c` et `price` colonnes, qui sont échappées comme `Quoted`, `Escaped` et `JSON` imprimées (pour sélectionner) ou sera prévu (insert) entre `Search phrase:`, `, count:`, `, ad price: $` et `;` délimiteurs respectivement. Exemple: + +`Search phrase: 'bathroom interior design', count: 2166, ad price: $3;` + +Le `format_template_rows_between_delimiter` paramètre spécifie délimiteur entre les lignes, qui est imprimé (ou attendu) après chaque ligne, sauf la dernière (`\n` par défaut) + +Paramètre `format_template_resultset` spécifie le chemin d'accès au fichier, qui contient une chaîne de format pour resultset. Format string for resultset a la même syntaxe qu'une chaîne de format pour row et permet de spécifier un préfixe, un suffixe et un moyen d'imprimer des informations supplémentaires. Il contient les espaces réservés suivants au lieu des noms de colonnes: + +- `data` est les lignes avec des données dans `format_template_row` format, séparés par des `format_template_rows_between_delimiter`. Cet espace doit être le premier espace réservé dans la chaîne de format. +- `totals` est la ligne avec des valeurs totales dans `format_template_row` format (lors de L'utilisation avec des totaux) +- `min` est la ligne avec des valeurs minimales dans `format_template_row` format (lorsque les extrêmes sont définis sur 1) +- `max` est la ligne avec des valeurs maximales en `format_template_row` format (lorsque les extrêmes sont définis sur 1) +- `rows` le nombre total de lignes de sortie +- `rows_before_limit` est le nombre minimal de lignes qu'il y aurait eu sans limite. Sortie uniquement si la requête contient LIMIT. Si la requête contient GROUP BY, rows\_before\_limit\_at\_least est le nombre exact de lignes qu'il y aurait eu sans limite. +- `time` est le temps d'exécution de la requête en secondes +- `rows_read` est le nombre de lignes a été lu +- `bytes_read` est le nombre d'octets (non compressé) a été lu + +Réservé `data`, `totals`, `min` et `max` ne doit pas avoir de règle d'échappement spécifiée (ou `None` doit être spécifié explicitement). Les espaces réservés restants peuvent avoir une règle d'échappement spécifiée. +Si l' `format_template_resultset` paramètre est une chaîne vide, `${data}` est utilisé comme valeur par défaut. +Pour insérer des requêtes format permet de sauter certaines colonnes ou certains champs si préfixe ou suffixe (voir Exemple). + +Sélectionnez exemple: + +``` sql +SELECT SearchPhrase, count() AS c FROM test.hits GROUP BY SearchPhrase ORDER BY c DESC LIMIT 5 FORMAT Template SETTINGS +format_template_resultset = '/some/path/resultset.format', format_template_row = '/some/path/row.format', format_template_rows_between_delimiter = '\n ' +``` + +`/some/path/resultset.format`: + +``` text + + Search phrases + + + + ${data} +
Search phrases
Search phrase Count
+ + ${max} +
Max
+ Processed ${rows_read:XML} rows in ${time:XML} sec + + +``` + +`/some/path/row.format`: + +``` text + ${0:XML} ${1:XML} +``` + +Résultat: + +``` html + + Search phrases + + + + + + + + +
Search phrases
Search phrase Count
8267016
bathroom interior design 2166
yandex 1655
spring 2014 fashion 1549
freeform photos 1480
+ + +
Max
8873898
+ Processed 3095973 rows in 0.1569913 sec + + +``` + +Insérez exemple: + +``` text +Some header +Page views: 5, User id: 4324182021466249494, Useless field: hello, Duration: 146, Sign: -1 +Page views: 6, User id: 4324182021466249494, Useless field: world, Duration: 185, Sign: 1 +Total rows: 2 +``` + +``` sql +INSERT INTO UserActivity FORMAT Template SETTINGS +format_template_resultset = '/some/path/resultset.format', format_template_row = '/some/path/row.format' +``` + +`/some/path/resultset.format`: + +``` text +Some header\n${data}\nTotal rows: ${:CSV}\n +``` + +`/some/path/row.format`: + +``` text +Page views: ${PageViews:CSV}, User id: ${UserID:CSV}, Useless field: ${:CSV}, Duration: ${Duration:CSV}, Sign: ${Sign:CSV} +``` + +`PageViews`, `UserID`, `Duration` et `Sign` à l'intérieur des espaces réservés sont des noms de colonnes dans la table. Les valeurs après `Useless field` en rangées et après `\nTotal rows:` dans le suffixe sera ignoré. +Tous les séparateurs dans les données d'entrée doivent être strictement égal à délimiteurs dans les chaînes de format. + +## TemplateIgnoreSpaces {#templateignorespaces} + +Ce format est adapté uniquement pour l'entrée. +Semblable à `Template`, mais ignore les espaces entre les séparateurs et les valeurs dans le flux d'entrée. Toutefois, si les chaînes de format contiennent des espaces, ces caractères seront attendus dans le flux d'entrée. Permet également de spécifier des espaces réservés vides (`${}` ou `${:None}`) pour diviser un délimiteur en parties séparées pour ignorer les espaces entre eux. Ces espaces réservés sont utilisés uniquement pour ignorer les caractères d'espace. +Il est possible de lire `JSON` l'utilisation de ce format, si les valeurs des colonnes ont le même ordre dans toutes les lignes. Par exemple, la requête suivante peut être utilisée pour insérer des données à partir d'un exemple de format de sortie [JSON](#json): + +``` sql +INSERT INTO table_name FORMAT TemplateIgnoreSpaces SETTINGS +format_template_resultset = '/some/path/resultset.format', format_template_row = '/some/path/row.format', format_template_rows_between_delimiter = ',' +``` + +`/some/path/resultset.format`: + +``` text +{${}"meta"${}:${:JSON},${}"data"${}:${}[${data}]${},${}"totals"${}:${:JSON},${}"extremes"${}:${:JSON},${}"rows"${}:${:JSON},${}"rows_before_limit_at_least"${}:${:JSON}${}} +``` + +`/some/path/row.format`: + +``` text +{${}"SearchPhrase"${}:${}${phrase:JSON}${},${}"c"${}:${}${cnt:JSON}${}} +``` + +## TSKV {#tskv} + +Similaire à TabSeparated, mais affiche une valeur au format name = value. Les noms sont échappés de la même manière qu'au format TabSeparated, et le symbole = est également échappé. + +``` text +SearchPhrase= count()=8267016 +SearchPhrase=bathroom interior design count()=2166 +SearchPhrase=yandex count()=1655 +SearchPhrase=2014 spring fashion count()=1549 +SearchPhrase=freeform photos count()=1480 +SearchPhrase=angelina jolie count()=1245 +SearchPhrase=omsk count()=1112 +SearchPhrase=photos of dog breeds count()=1091 +SearchPhrase=curtain designs count()=1064 +SearchPhrase=baku count()=1000 +``` + +[NULL](../query_language/syntax.md) est formaté en tant qu' `\N`. + +``` sql +SELECT * FROM t_null FORMAT TSKV +``` + +``` text +x=1 y=\N +``` + +Quand il y a un grand nombre de petites colonnes, ce format est inefficace, et il n'y a généralement pas de raison de l'utiliser. Néanmoins, ce n'est pas pire que JSONEachRow en termes d'efficacité. + +Both data output and parsing are supported in this format. For parsing, any order is supported for the values of different columns. It is acceptable for some values to be omitted – they are treated as equal to their default values. In this case, zeros and blank rows are used as default values. Complex values that could be specified in the table are not supported as defaults. + +L'analyse permet la présence du champ supplémentaire `tskv` sans le signe égal ou de valeur. Ce champ est ignoré. + +## CSV {#csv} + +Format des valeurs séparées par des virgules ([RFC](https://tools.ietf.org/html/rfc4180)). + +Lors du formatage, les lignes sont entourées de guillemets doubles. Un guillemet double à l'intérieur d'une chaîne est affiché sous la forme de deux guillemets doubles dans une rangée. Il n'y a pas d'autres règles pour échapper les caractères. Date et date-heure sont entre guillemets. Les nombres sont produits sans guillemets. Les valeurs sont séparées par un caractère délimiteur, qui est `,` par défaut. Le caractère délimiteur est défini dans le paramètre [format\_csv\_delimiter](../operations/settings/settings.md#settings-format_csv_delimiter). Les lignes sont séparées à L'aide du saut de ligne Unix (LF). Les tableaux sont sérialisés au format CSV comme suit: tout d'abord, le tableau est sérialisé en une chaîne comme au format TabSeparated, puis la chaîne résultante est sortie au format CSV entre guillemets doubles. Les Tuples au format CSV sont sérialisés en tant que colonnes séparées (c'est-à-dire que leur imbrication dans le tuple est perdue). + +``` bash +$ clickhouse-client --format_csv_delimiter="|" --query="INSERT INTO test.csv FORMAT CSV" < data.csv +``` + +\*Par défaut, le délimiteur est `,`. Voir la [format\_csv\_delimiter](../operations/settings/settings.md#settings-format_csv_delimiter) réglage pour plus d'informations. + +Lors de l'analyse, toutes les valeurs peuvent être analysés avec ou sans guillemets. Les guillemets doubles et simples sont pris en charge. Les lignes peuvent également être organisées sans guillemets. Dans ce cas, ils sont analysés jusqu'au caractère délimiteur ou au saut de ligne (CR ou LF). En violation de la RFC, lors de l'analyse des lignes sans guillemets, les espaces et les onglets de début et de fin sont ignorés. Pour le saut de ligne, les types Unix (LF), Windows (CR LF) et Mac OS Classic (CR LF) sont tous pris en charge. + +Les valeurs d'entrée non cotées vides sont remplacées par des valeurs par défaut pour les colonnes respectives, si +[input\_format\_defaults\_for\_omitted\_fields](../operations/settings/settings.md#session_settings-input_format_defaults_for_omitted_fields) +est activé. + +`NULL` est formaté en tant qu' `\N` ou `NULL` ou une chaîne vide non cotée (voir paramètres [input\_format\_csv\_unquoted\_null\_literal\_as\_null](../operations/settings/settings.md#settings-input_format_csv_unquoted_null_literal_as_null) et [input\_format\_defaults\_for\_omitted\_fields](../operations/settings/settings.md#session_settings-input_format_defaults_for_omitted_fields)). + +Le format CSV prend en charge la sortie des totaux et des extrêmes de la même manière que `TabSeparated`. + +## CSVWithNames {#csvwithnames} + +Imprime également la ligne d'en-tête, semblable à `TabSeparatedWithNames`. + +## CustomSeparated {#format-customseparated} + +Semblable à [Modèle](#format-template), mais il imprime ou lit toutes les colonnes et utilise la règle d'échappement du paramètre `format_custom_escaping_rule` et délimiteurs de paramètres `format_custom_field_delimiter`, `format_custom_row_before_delimiter`, `format_custom_row_after_delimiter`, `format_custom_row_between_delimiter`, `format_custom_result_before_delimiter` et `format_custom_result_after_delimiter`, pas à partir de chaînes de format. +Il y a aussi `CustomSeparatedIgnoreSpaces` le format, qui est similaire à `TemplateIgnoreSpaces`. + +## JSON {#json} + +Sorties de données au format JSON. Outre les tables de données, il génère également des noms et des types de colonnes, ainsi que des informations supplémentaires: le nombre total de lignes de sortie et le nombre de lignes qui auraient pu être sorties s'il n'y avait pas de limite. Exemple: + +``` sql +SELECT SearchPhrase, count() AS c FROM test.hits GROUP BY SearchPhrase WITH TOTALS ORDER BY c DESC LIMIT 5 FORMAT JSON +``` + +``` json +{ + "meta": + [ + { + "name": "SearchPhrase", + "type": "String" + }, + { + "name": "c", + "type": "UInt64" + } + ], + + "data": + [ + { + "SearchPhrase": "", + "c": "8267016" + }, + { + "SearchPhrase": "bathroom interior design", + "c": "2166" + }, + { + "SearchPhrase": "yandex", + "c": "1655" + }, + { + "SearchPhrase": "spring 2014 fashion", + "c": "1549" + }, + { + "SearchPhrase": "freeform photos", + "c": "1480" + } + ], + + "totals": + { + "SearchPhrase": "", + "c": "8873898" + }, + + "extremes": + { + "min": + { + "SearchPhrase": "", + "c": "1480" + }, + "max": + { + "SearchPhrase": "", + "c": "8267016" + } + }, + + "rows": 5, + + "rows_before_limit_at_least": 141137 +} +``` + +Le JSON est compatible avec JavaScript. Pour ce faire, certains caractères sont en outre échappés: la barre oblique `/` s'est échappée comme l' `\/`; sauts de ligne alternatifs `U+2028` et `U+2029`, qui cassent certains navigateurs, sont échappés comme `\uXXXX`. Les caractères de contrôle ASCII sont échappés: retour arrière, flux de formulaire, saut de ligne, retour chariot et tabulation horizontale sont remplacés par `\b`, `\f`, `\n`, `\r`, `\t` , ainsi que les octets restants dans la plage 00-1F en utilisant `\uXXXX` sequences. Invalid UTF-8 sequences are changed to the replacement character � so the output text will consist of valid UTF-8 sequences. For compatibility with JavaScript, Int64 and UInt64 integers are enclosed in double-quotes by default. To remove the quotes, you can set the configuration parameter [output\_format\_json\_quote\_64bit\_integers](../operations/settings/settings.md#session_settings-output_format_json_quote_64bit_integers) à 0. + +`rows` – The total number of output rows. + +`rows_before_limit_at_least` Le nombre minimal de lignes aurait été sans limite. Sortie uniquement si la requête contient LIMIT. +Si la requête contient GROUP BY, rows\_before\_limit\_at\_least est le nombre exact de lignes qu'il y aurait eu sans limite. + +`totals` – Total values (when using WITH TOTALS). + +`extremes` – Extreme values (when extremes are set to 1). + +Ce format n'est approprié que pour la sortie d'un résultat de requête, mais pas pour l'analyse (récupération des données à insérer dans une table). + +Supports ClickHouse [NULL](../query_language/syntax.md) s'affiche à l'écran `null` dans la sortie JSON. + +Voir aussi l' [JSONEachRow](#jsoneachrow) format. + +## JSONCompact {#jsoncompact} + +Diffère de JSON uniquement en ce que les lignes de données sont sorties dans des tableaux, pas dans des objets. + +Exemple: + +``` json +{ + "meta": + [ + { + "name": "SearchPhrase", + "type": "String" + }, + { + "name": "c", + "type": "UInt64" + } + ], + + "data": + [ + ["", "8267016"], + ["bathroom interior design", "2166"], + ["yandex", "1655"], + ["fashion trends spring 2014", "1549"], + ["freeform photo", "1480"] + ], + + "totals": ["","8873898"], + + "extremes": + { + "min": ["","1480"], + "max": ["","8267016"] + }, + + "rows": 5, + + "rows_before_limit_at_least": 141137 +} +``` + +Ce format n'est approprié que pour la sortie d'un résultat de requête, mais pas pour l'analyse (récupération des données à insérer dans une table). +Voir aussi l' `JSONEachRow` format. + +## JSONEachRow {#jsoneachrow} + +Lorsque vous utilisez ce format, ClickHouse affiche les lignes en tant qu'objets JSON séparés et délimités par des retours à la ligne, mais les données dans leur ensemble ne sont pas JSON valides. + +``` json +{"SearchPhrase":"curtain designs","count()":"1064"} +{"SearchPhrase":"baku","count()":"1000"} +{"SearchPhrase":"","count()":"8267016"} +``` + +Lors de l'insertion des données, vous devez fournir un objet JSON distinct pour chaque ligne. + +### Insertion De Données {#inserting-data} + +``` sql +INSERT INTO UserActivity FORMAT JSONEachRow {"PageViews":5, "UserID":"4324182021466249494", "Duration":146,"Sign":-1} {"UserID":"4324182021466249494","PageViews":6,"Duration":185,"Sign":1} +``` + +Clickhouse permet: + +- Toute commande de paires clé-valeur dans l'objet. +- Omettre certaines valeurs. + +ClickHouse ignore les espaces entre les éléments et les virgules après les objets. Vous pouvez passer tous les objets en une seule ligne. Vous n'avez pas à les séparer avec des sauts de ligne. + +**Valeurs omises traitement** + +Clickhouse remplace les valeurs omises par les valeurs par défaut pour le [types de données](../data_types/index.md). + +Si `DEFAULT expr` clickhouse utilise différentes règles de substitution en fonction de [input\_format\_defaults\_for\_omitted\_fields](../operations/settings/settings.md#session_settings-input_format_defaults_for_omitted_fields) paramètre. + +Considérons le tableau suivant: + +``` sql +CREATE TABLE IF NOT EXISTS example_table +( + x UInt32, + a DEFAULT x * 2 +) ENGINE = Memory; +``` + +- Si `input_format_defaults_for_omitted_fields = 0`, alors la valeur par défaut pour `x` et `a` égal `0` (la valeur par défaut pour le `UInt32` type de données). +- Si `input_format_defaults_for_omitted_fields = 1`, alors la valeur par défaut pour `x` égal `0` mais la valeur par défaut de `a` égal `x * 2`. + +!!! note "Avertissement" + Lors de l'insertion de données avec `insert_sample_with_metadata = 1`, ClickHouse consomme plus de ressources de calcul, par rapport à l'insertion avec `insert_sample_with_metadata = 0`. + +### La Sélection De Données {#selecting-data} + +Envisager l' `UserActivity` table comme un exemple: + +``` text +┌──────────────UserID─┬─PageViews─┬─Duration─┬─Sign─┐ +│ 4324182021466249494 │ 5 │ 146 │ -1 │ +│ 4324182021466249494 │ 6 │ 185 │ 1 │ +└─────────────────────┴───────────┴──────────┴──────┘ +``` + +Requête `SELECT * FROM UserActivity FORMAT JSONEachRow` retourner: + +``` text +{"UserID":"4324182021466249494","PageViews":5,"Duration":146,"Sign":-1} +{"UserID":"4324182021466249494","PageViews":6,"Duration":185,"Sign":1} +``` + +Contrairement à l' [JSON](#json) format, il n'y a pas de substitution de séquences UTF-8 non valides. Les valeurs sont échappés de la même manière que pour `JSON`. + +!!! note "Note" + Tout ensemble d'octets peut être sortie dans les cordes. L'utilisation de la `JSONEachRow` formater si vous êtes sûr que les données de la table peuvent être formatées en tant que JSON sans perdre aucune information. + +### Utilisation de Structures imbriquées {#jsoneachrow-nested} + +Si vous avez une table avec [Imbriqué](../data_types/nested_data_structures/nested.md) colonnes de type de données, vous pouvez insérer des données JSON avec la même structure. Activer cette fonctionnalité avec le [input\_format\_import\_nested\_json](../operations/settings/settings.md#settings-input_format_import_nested_json) paramètre. + +Par exemple, considérez le tableau suivant: + +``` sql +CREATE TABLE json_each_row_nested (n Nested (s String, i Int32) ) ENGINE = Memory +``` + +Comme vous pouvez le voir dans la `Nested` description du type de données, ClickHouse traite chaque composant de la structure imbriquée comme une colonne distincte (`n.s` et `n.i` pour notre table). Vous pouvez insérer des données de la manière suivante: + +``` sql +INSERT INTO json_each_row_nested FORMAT JSONEachRow {"n.s": ["abc", "def"], "n.i": [1, 23]} +``` + +Pour insérer des données en tant qu'objet JSON hiérarchique, définissez [input\_format\_import\_nested\_json=1](../operations/settings/settings.md#settings-input_format_import_nested_json). + +``` json +{ + "n": { + "s": ["abc", "def"], + "i": [1, 23] + } +} +``` + +Sans ce paramètre, ClickHouse lance une exception. + +``` sql +SELECT name, value FROM system.settings WHERE name = 'input_format_import_nested_json' +``` + +``` text +┌─name────────────────────────────┬─value─┐ +│ input_format_import_nested_json │ 0 │ +└─────────────────────────────────┴───────┘ +``` + +``` sql +INSERT INTO json_each_row_nested FORMAT JSONEachRow {"n": {"s": ["abc", "def"], "i": [1, 23]}} +``` + +``` text +Code: 117. DB::Exception: Unknown field found while parsing JSONEachRow format: n: (at row 1) +``` + +``` sql +SET input_format_import_nested_json=1 +INSERT INTO json_each_row_nested FORMAT JSONEachRow {"n": {"s": ["abc", "def"], "i": [1, 23]}} +SELECT * FROM json_each_row_nested +``` + +``` text +┌─n.s───────────┬─n.i────┐ +│ ['abc','def'] │ [1,23] │ +└───────────────┴────────┘ +``` + +## Natif {#native} + +Le format le plus efficace. Les données sont écrites et lues par des blocs au format binaire. Pour chaque bloc, le nombre de lignes, le nombre de colonnes, les noms et types de colonnes et les parties de colonnes de ce bloc sont enregistrés les uns après les autres. En d'autres termes, ce format est “columnar” – it doesn't convert columns to rows. This is the format used in the native interface for interaction between servers, for using the command-line client, and for C++ clients. + +Vous pouvez utiliser ce format pour générer rapidement des vidages qui ne peuvent être lus que par le SGBD ClickHouse. Cela n'a pas de sens de travailler avec ce format vous-même. + +## NULL {#null} + +Rien n'est sortie. Cependant, la requête est traitée et, lors de l'utilisation du client de ligne de commande, les données sont transmises au client. Ceci est utilisé pour les tests, y compris les tests de performance. +Évidemment, ce format n'est approprié que pour la sortie, pas pour l'analyse. + +## Joli {#pretty} + +Affiche les données sous forme de tables Unicode-art, en utilisant également des séquences d'échappement ANSI pour définir les couleurs dans le terminal. +Une grille complète de la table est dessinée, et chaque ligne occupe deux lignes dans le terminal. +Chaque bloc de résultat est sorti sous la forme d'une table séparée. Ceci est nécessaire pour que les blocs puissent être sortis sans résultats de mise en mémoire tampon (la mise en mémoire tampon serait nécessaire pour pré-calculer la largeur visible de toutes les valeurs). + +[NULL](../query_language/syntax.md) est sortie `ᴺᵁᴸᴸ`. + +Exemple (montré pour le [PrettyCompact](#prettycompact) format): + +``` sql +SELECT * FROM t_null +``` + +``` text +┌─x─┬────y─┐ +│ 1 │ ᴺᵁᴸᴸ │ +└───┴──────┘ +``` + +Les lignes ne sont pas échappées dans les formats Pretty\*. Exemple est montré pour la [PrettyCompact](#prettycompact) format: + +``` sql +SELECT 'String with \'quotes\' and \t character' AS Escaping_test +``` + +``` text +┌─Escaping_test────────────────────────┐ +│ String with 'quotes' and character │ +└──────────────────────────────────────┘ +``` + +Pour éviter de déverser trop de données sur le terminal, seules les 10 000 premières lignes sont imprimées. Si le nombre de lignes est supérieur ou égal à 10 000, le message “Showed first 10 000” est imprimé. +Ce format n'est approprié que pour la sortie d'un résultat de requête, mais pas pour l'analyse (récupération des données à insérer dans une table). + +Le joli format prend en charge la sortie des valeurs totales (lors de L'utilisation avec des totaux) et des extrêmes (lorsque ‘extremes’ est réglé sur 1). Dans ces cas, les valeurs totales et les valeurs extrêmes sont sorties après les données principales, dans des tableaux séparés. Exemple (montré pour le [PrettyCompact](#prettycompact) format): + +``` sql +SELECT EventDate, count() AS c FROM test.hits GROUP BY EventDate WITH TOTALS ORDER BY EventDate FORMAT PrettyCompact +``` + +``` text +┌──EventDate─┬───────c─┐ +│ 2014-03-17 │ 1406958 │ +│ 2014-03-18 │ 1383658 │ +│ 2014-03-19 │ 1405797 │ +│ 2014-03-20 │ 1353623 │ +│ 2014-03-21 │ 1245779 │ +│ 2014-03-22 │ 1031592 │ +│ 2014-03-23 │ 1046491 │ +└────────────┴─────────┘ + +Totals: +┌──EventDate─┬───────c─┐ +│ 0000-00-00 │ 8873898 │ +└────────────┴─────────┘ + +Extremes: +┌──EventDate─┬───────c─┐ +│ 2014-03-17 │ 1031592 │ +│ 2014-03-23 │ 1406958 │ +└────────────┴─────────┘ +``` + +## PrettyCompact {#prettycompact} + +Diffère de [Joli](#pretty) en ce que la grille est dessinée entre les lignes et le résultat est plus compact. +Ce format est utilisé par défaut dans le client de ligne de commande en mode interactif. + +## PrettyCompactMonoBlock {#prettycompactmonoblock} + +Diffère de [PrettyCompact](#prettycompact) dans ce cas, jusqu'à 10 000 lignes sont mises en mémoire tampon, puis sorties en tant que table unique, pas par blocs. + +## PrettyNoEscapes {#prettynoescapes} + +Diffère de Pretty en ce que les séquences d'échappement ANSI ne sont pas utilisées. Ceci est nécessaire pour afficher ce format dans un navigateur, ainsi que pour utiliser le ‘watch’ utilitaire de ligne de commande. + +Exemple: + +``` bash +$ watch -n1 "clickhouse-client --query='SELECT event, value FROM system.events FORMAT PrettyCompactNoEscapes'" +``` + +Vous pouvez utiliser L'interface HTTP pour afficher dans le navigateur. + +### Joliscompactnoescapes {#prettycompactnoescapes} + +Le même que le réglage précédent. + +### PrettySpaceNoEscapes {#prettyspacenoescapes} + +Le même que le réglage précédent. + +## PrettySpace {#prettyspace} + +Diffère de [PrettyCompact](#prettycompact) dans cet espace (caractères d'espace) est utilisé à la place de la grille. + +## RowBinary {#rowbinary} + +Formats et analyse les données par ligne au format binaire. Les lignes et les valeurs sont répertoriées consécutivement, sans séparateurs. +Ce format est moins efficace que le format natif car il est basé sur des lignes. + +Les entiers utilisent une représentation little-endian de longueur fixe. Par exemple, UInt64 utilise 8 octets. +DateTime est représenté par UInt32 contenant L'horodatage Unix comme valeur. +Date est représenté comme un objet UInt16 qui contient le nombre de jours depuis 1970-01-01 comme valeur. +La chaîne est représentée par une longueur varint (non signée [LEB128](https://en.wikipedia.org/wiki/LEB128)), suivie par les octets de la chaîne. +FixedString est représenté simplement comme une séquence d'octets. + +Le tableau est représenté sous la forme d'une longueur varint (non signée [LEB128](https://en.wikipedia.org/wiki/LEB128)), suivie par les éléments de la matrice. + +Pour [NULL](../query_language/syntax.md#null-literal) un soutien, un octet supplémentaire contenant 1 ou 0 est ajouté avant chaque [Nullable](../data_types/nullable.md) valeur. Si la valeur est 1, alors la valeur est `NULL` et cet octet est interprétée comme une valeur distincte. Si 0, la valeur après l'octet n'est pas `NULL`. + +## Rowbinarywithnamesettypes {#rowbinarywithnamesandtypes} + +Semblable à [RowBinary](#rowbinary) mais avec l'ajout de l'en-tête: + +- [LEB128](https://en.wikipedia.org/wiki/LEB128)- nombre codé de colonnes (N) +- N `String`s spécification des noms de colonnes +- N `String`s spécification des types de colonnes + +## Valeur {#data-format-values} + +Imprime chaque ligne entre parenthèses. Les lignes sont séparées par des virgules. Il n'y a pas de virgule après la dernière ligne. Les valeurs entre parenthèses sont également séparées par des virgules. Les nombres sont produits dans un format décimal sans guillemets. Les tableaux sont affichés entre crochets. Les chaînes, les dates et les dates avec des heures sont affichées entre guillemets. Les règles d'échappement et l'analyse sont similaires à [TabSeparated](#tabseparated) format. Pendant le formatage, les espaces supplémentaires ne sont pas insérés, mais pendant l'analyse, ils sont autorisés et ignorés (sauf pour les espaces à l'intérieur des valeurs de tableau, qui ne sont pas autorisés). [NULL](../query_language/syntax.md) est représentée comme `NULL`. + +The minimum set of characters that you need to escape when passing data in Values ​​format: single quotes and backslashes. + +C'est le format qui est utilisé dans `INSERT INTO t VALUES ...`, mais vous pouvez également l'utiliser pour le formatage des résultats de requête. + +Voir aussi: [input\_format\_values\_interpret\_expressions](../operations/settings/settings.md#settings-input_format_values_interpret_expressions) et [input\_format\_values\_deduce\_templates\_of\_expressions](../operations/settings/settings.md#settings-input_format_values_deduce_templates_of_expressions) paramètre. + +## Vertical {#vertical} + +Imprime chaque valeur sur une ligne distincte avec le nom de colonne spécifié. Ce format est pratique pour imprimer une ou plusieurs lignes si chaque ligne est constituée d'un grand nombre de colonnes. + +[NULL](../query_language/syntax.md) est sortie `ᴺᵁᴸᴸ`. + +Exemple: + +``` sql +SELECT * FROM t_null FORMAT Vertical +``` + +``` text +Row 1: +────── +x: 1 +y: ᴺᵁᴸᴸ +``` + +Les lignes ne sont pas échappées au format Vertical: + +``` sql +SELECT 'string with \'quotes\' and \t with some special \n characters' AS test FORMAT Vertical +``` + +``` text +Row 1: +────── +test: string with 'quotes' and with some special + characters +``` + +Ce format n'est approprié que pour la sortie d'un résultat de requête, mais pas pour l'analyse (récupération des données à insérer dans une table). + +## VerticalRaw {#verticalraw} + +Semblable à [Vertical](#vertical), mais avec échapper désactivé. Ce format ne convient que pour la sortie des résultats de requête, pas pour l'analyse (recevoir des données et les insérer dans la table). + +## XML {#xml} + +Le format XML ne convient que pour la sortie, pas pour l'analyse. Exemple: + +``` xml + + + + + + SearchPhrase + String + + + count() + UInt64 + + + + + + + 8267016 + + + bathroom interior design + 2166 + + + yandex + 1655 + + + 2014 spring fashion + 1549 + + + freeform photos + 1480 + + + angelina jolie + 1245 + + + omsk + 1112 + + + photos of dog breeds + 1091 + + + curtain designs + 1064 + + + baku + 1000 + + + 10 + 141137 + +``` + +Si le nom de colonne n'a pas un format acceptable, juste ‘field’ est utilisé comme le nom de l'élément. En général, la structure XML suit la structure JSON. +Just as for JSON, invalid UTF-8 sequences are changed to the replacement character � so the output text will consist of valid UTF-8 sequences. + +Dans les valeurs de chaîne, les caractères `<` et `&` sont échappés comme `<` et `&`. + +Les tableaux sont produits comme `HelloWorld...`,et n-uplets d' `HelloWorld...`. + +## CapnProto {#capnproto} + +Cap'n Proto est un format de message binaire similaire aux tampons de protocole et Thrift, mais pas comme JSON ou MessagePack. + +Les messages Cap'n Proto sont strictement typés et ne sont pas auto-descriptifs, ce qui signifie qu'ils ont besoin d'une description de schéma externe. Le schéma est appliqué à la volée et mise en cache pour chaque requête. + +``` bash +$ cat capnproto_messages.bin | clickhouse-client --query "INSERT INTO test.hits FORMAT CapnProto SETTINGS format_schema='schema:Message'" +``` + +Où `schema.capnp` ressemble à ceci: + +``` capnp +struct Message { + SearchPhrase @0 :Text; + c @1 :Uint64; +} +``` + +La désérialisation est efficace et n'augmente généralement pas la charge du système. + +Voir aussi [Schéma De Format](#formatschema). + +## Protobuf {#protobuf} + +Protobuf-est un [Protocol Buffers](https://developers.google.com/protocol-buffers/) format. + +Ce format nécessite un schéma de format externe. Le schéma est mis en cache entre les requêtes. +Clickhouse prend en charge les deux `proto2` et `proto3` syntaxe. Les champs répétés/optionnels/obligatoires sont pris en charge. + +Exemples d'utilisation: + +``` sql +SELECT * FROM test.table FORMAT Protobuf SETTINGS format_schema = 'schemafile:MessageType' +``` + +``` bash +cat protobuf_messages.bin | clickhouse-client --query "INSERT INTO test.table FORMAT Protobuf SETTINGS format_schema='schemafile:MessageType'" +``` + +où le fichier `schemafile.proto` ressemble à ceci: + +``` capnp +syntax = "proto3"; + +message MessageType { + string name = 1; + string surname = 2; + uint32 birthDate = 3; + repeated string phoneNumbers = 4; +}; +``` + +Pour trouver la correspondance entre les colonnes de table et les champs du type de message des tampons de protocole, ClickHouse compare leurs noms. +Cette comparaison est insensible à la casse et les caractères `_` (trait de soulignement) et `.` (dot) sont considérés comme égaux. +Si les types d'une colonne et d'un champ de message des tampons de protocole sont différents, la conversion nécessaire est appliquée. + +Les messages imbriqués sont pris en charge. Par exemple, pour le champ `z` dans le type de message suivant + +``` capnp +message MessageType { + message XType { + message YType { + int32 z; + }; + repeated YType y; + }; + XType x; +}; +``` + +ClickHouse tente de trouver une colonne nommée `x.y.z` (ou `x_y_z` ou `X.y_Z` et ainsi de suite). +Les messages imbriqués conviennent à l'entrée ou à la sortie d'un [structures de données imbriquées](../data_types/nested_data_structures/nested.md). + +Valeurs par défaut définies dans un schéma protobuf comme ceci + +``` capnp +syntax = "proto2"; + +message MessageType { + optional int32 result_per_page = 3 [default = 10]; +} +``` + +ne sont pas appliquées; la [valeurs par défaut de la table](../query_language/create.md#create-default-values) sont utilisés à leur place. + +Clickhouse entrées et sorties messages protobuf dans le `length-delimited` format. +Cela signifie avant que chaque message devrait être écrit sa longueur comme un [varint](https://developers.google.com/protocol-buffers/docs/encoding#varints). +Voir aussi [comment lire / écrire des messages protobuf délimités par la longueur dans les langues populaires](https://cwiki.apache.org/confluence/display/GEODE/Delimiting+Protobuf+Messages). + +## Avro {#data-format-avro} + +[Apache Avro](http://avro.apache.org/) est un cadre de sérialisation de données orienté ligne développé dans le projet Hadoop D'Apache. + +ClickHouse Avro format prend en charge la lecture et l'écriture [Fichiers de données Avro](http://avro.apache.org/docs/current/spec.html#Object+Container+Files). + +### Types De Données Correspondant {#data_types-matching} + +Le tableau ci-dessous montre les types de données pris en charge et comment ils correspondent à ClickHouse [types de données](../data_types/index.md) dans `INSERT` et `SELECT` requête. + +| Type de données Avro `INSERT` | Type de données ClickHouse | Type de données Avro `SELECT` | +|---------------------------------------------|-----------------------------------------------------------------------------------------|-------------------------------| +| `boolean`, `int`, `long`, `float`, `double` | [Int (8/16/32)](../data_types/int_uint.md), [UInt (8/16/32)](../data_types/int_uint.md) | `int` | +| `boolean`, `int`, `long`, `float`, `double` | [Int64](../data_types/int_uint.md), [UInt64](../data_types/int_uint.md) | `long` | +| `boolean`, `int`, `long`, `float`, `double` | [Float32](../data_types/float.md) | `float` | +| `boolean`, `int`, `long`, `float`, `double` | [Float64](../data_types/float.md) | `double` | +| `bytes`, `string`, `fixed`, `enum` | [Chaîne](../data_types/string.md) | `bytes` | +| `bytes`, `string`, `fixed` | [FixedString (N)](../data_types/fixedstring.md) | `fixed(N)` | +| `enum` | [Enum (8/16)](../data_types/enum.md) | `enum` | +| `array(T)` | [Array(T)](../data_types/array.md) | `array(T)` | +| `union(null, T)`, `union(T, null)` | [Nullable (T)](../data_types/date.md) | `union(null, T)` | +| `null` | [Les Valeurs Null(Nothing)](../data_types/special_data_types/nothing.md) | `null` | +| `int (date)` \* | [Date](../data_types/date.md) | `int (date)` \* | +| `long (timestamp-millis)` \* | [DateTime64 (3)](../data_types/datetime.md) | `long (timestamp-millis)` \* | +| `long (timestamp-micros)` \* | [DateTime64 (6)](../data_types/datetime.md) | `long (timestamp-micros)` \* | + +\* [Types logiques Avro](http://avro.apache.org/docs/current/spec.html#Logical+Types) + +Types de données Avro non pris en charge: `record` (non-root), `map` + +Types de données logiques Avro non pris en charge: `uuid`, `time-millis`, `time-micros`, `duration` + +### Insertion De Données {#inserting-data-1} + +Pour insérer des données d'un fichier Avro dans la table ClickHouse: + +``` bash +$ cat file.avro | clickhouse-client --query="INSERT INTO {some_table} FORMAT Avro" +``` + +Le schéma racine du fichier Avro d'entrée doit être de `record` type. + +Pour trouver la correspondance entre les colonnes de table et les champs du schéma Avro ClickHouse compare leurs noms. Cette comparaison est sensible à la casse. +Les champs inutilisés sont ignorés. + +Les types de données des colonnes de la table ClickHouse peuvent différer des champs correspondants des données Avro insérées. Lors de l'insertion de données, ClickHouse interprète les types de données selon le tableau ci-dessus, puis [jeter](../query_language/functions/type_conversion_functions/#type_conversion_function-cast) les données au type de colonne correspondant. + +### La Sélection De Données {#selecting-data-1} + +Pour sélectionner des données de la table ClickHouse dans un fichier Avro: + +``` bash +$ clickhouse-client --query="SELECT * FROM {some_table} FORMAT Avro" > file.avro +``` + +Les noms de colonnes doivent: + +- commencer avec `[A-Za-z_]` +- par la suite contenir uniquement `[A-Za-z0-9_]` + +Sortie Avro fichier de compression et sync intervalle peut être configuré avec [output\_format\_avro\_codec](../operations/settings/settings.md#settings-output_format_avro_codec) et [output\_format\_avro\_sync\_interval](../operations/settings/settings.md#settings-output_format_avro_sync_interval) respectivement. + +## AvroConfluent {#data-format-avro-confluent} + +Avroconfluent prend en charge le décodage des messages Avro à objet unique couramment utilisés avec [Kafka](https://kafka.apache.org/) et [Confluentes Schéma De Registre](https://docs.confluent.io/current/schema-registry/index.html). + +Chaque message Avro intègre un id de schéma qui peut être résolu dans le schéma réel à l'aide du registre de schéma. + +Les schémas sont mis en cache une fois résolus. + +L'URL du registre de schéma est configurée avec [format\_avro\_schema\_registry\_url](../operations/settings/settings.md#settings-format_avro_schema_registry_url) + +### Types De Données Correspondant {#data_types-matching-1} + +Même que [Avro](#data-format-avro) + +### Utilisation {#usage} + +Pour vérifier rapidement la résolution du schéma, vous pouvez utiliser [kafkacat](https://github.com/edenhill/kafkacat) avec [clickhouse-local](../operations/utils/clickhouse-local.md): + +``` bash +$ kafkacat -b kafka-broker -C -t topic1 -o beginning -f '%s' -c 3 | clickhouse-local --input-format AvroConfluent --format_avro_schema_registry_url 'http://schema-registry' -S "field1 Int64, field2 String" -q 'select * from table' +1 a +2 b +3 c +``` + +Utiliser `AvroConfluent` avec [Kafka](../operations/table_engines/kafka.md): + +``` sql +CREATE TABLE topic1_stream +( + field1 String, + field2 String +) +ENGINE = Kafka() +SETTINGS +kafka_broker_list = 'kafka-broker', +kafka_topic_list = 'topic1', +kafka_group_name = 'group1', +kafka_format = 'AvroConfluent'; + +SET format_avro_schema_registry_url = 'http://schema-registry'; + +SELECT * FROM topic1_stream; +``` + +!!! note "Avertissement" + Paramètre `format_avro_schema_registry_url` doit être configuré dans `users.xml` afin de maintenir sa valeur après un redémarrage. + +## Parquet {#data-format-parquet} + +[Apache Parquet](http://parquet.apache.org/) est un format de stockage colonnaire répandu dans L'écosystème Hadoop. ClickHouse prend en charge les opérations de lecture et d'écriture pour ce format. + +### Types De Données Correspondant {#data_types-matching-2} + +Le tableau ci-dessous montre les types de données pris en charge et comment ils correspondent à ClickHouse [types de données](../data_types/index.md) dans `INSERT` et `SELECT` requête. + +| Type de données Parquet (`INSERT`) | Type de données ClickHouse | Type de données Parquet (`SELECT`) | +|------------------------------------|---------------------------------------------|------------------------------------| +| `UINT8`, `BOOL` | [UInt8](../data_types/int_uint.md) | `UINT8` | +| `INT8` | [Int8](../data_types/int_uint.md) | `INT8` | +| `UINT16` | [UInt16](../data_types/int_uint.md) | `UINT16` | +| `INT16` | [Int16](../data_types/int_uint.md) | `INT16` | +| `UINT32` | [UInt32](../data_types/int_uint.md) | `UINT32` | +| `INT32` | [Int32](../data_types/int_uint.md) | `INT32` | +| `UINT64` | [UInt64](../data_types/int_uint.md) | `UINT64` | +| `INT64` | [Int64](../data_types/int_uint.md) | `INT64` | +| `FLOAT`, `HALF_FLOAT` | [Float32](../data_types/float.md) | `FLOAT` | +| `DOUBLE` | [Float64](../data_types/float.md) | `DOUBLE` | +| `DATE32` | [Date](../data_types/date.md) | `UINT16` | +| `DATE64`, `TIMESTAMP` | [DateTime](../data_types/datetime.md) | `UINT32` | +| `STRING`, `BINARY` | [Chaîne](../data_types/string.md) | `STRING` | +| — | [FixedString](../data_types/fixedstring.md) | `STRING` | +| `DECIMAL` | [Décimal](../data_types/decimal.md) | `DECIMAL` | + +Clickhouse prend en charge la précision configurable de `Decimal` type. Le `INSERT` requête traite le Parquet `DECIMAL` tapez comme le ClickHouse `Decimal128` type. + +Types de données Parquet non pris en charge: `DATE32`, `TIME32`, `FIXED_SIZE_BINARY`, `JSON`, `UUID`, `ENUM`. + +Les types de données des colonnes de table ClickHouse peuvent différer des champs correspondants des données de Parquet insérées. Lors de l'insertion de données, ClickHouse interprète les types de données selon le tableau ci-dessus, puis [jeter](../query_language/functions/type_conversion_functions/#type_conversion_function-cast) les données de ce type de données qui est défini pour la colonne de la table ClickHouse. + +### Insertion et sélection de données {#inserting-and-selecting-data} + +Vous pouvez insérer des données Parquet à partir d'un fichier dans la table ClickHouse par la commande suivante: + +``` bash +$ cat {filename} | clickhouse-client --query="INSERT INTO {some_table} FORMAT Parquet" +``` + +Vous pouvez sélectionner des données à partir d'une table de ClickHouse et les enregistrer dans un fichier au format Parquet par la commande suivante: + +``` bash +$ clickhouse-client --query="SELECT * FROM {some_table} FORMAT Parquet" > {some_file.pq} +``` + +Pour échanger des données avec Hadoop, vous pouvez utiliser [Moteur de table HDFS](../operations/table_engines/hdfs.md). + +## ORC {#data-format-orc} + +[Apache ORC](https://orc.apache.org/) est un format de stockage colonnaire répandu dans L'écosystème Hadoop. Vous ne pouvez insérer des données dans ce format à ClickHouse. + +### Types De Données Correspondant {#data_types-matching-3} + +Le tableau ci-dessous montre les types de données pris en charge et comment ils correspondent à ClickHouse [types de données](../data_types/index.md) dans `INSERT` requête. + +| Type de données ORC (`INSERT`) | Type de données ClickHouse | +|--------------------------------|---------------------------------------| +| `UINT8`, `BOOL` | [UInt8](../data_types/int_uint.md) | +| `INT8` | [Int8](../data_types/int_uint.md) | +| `UINT16` | [UInt16](../data_types/int_uint.md) | +| `INT16` | [Int16](../data_types/int_uint.md) | +| `UINT32` | [UInt32](../data_types/int_uint.md) | +| `INT32` | [Int32](../data_types/int_uint.md) | +| `UINT64` | [UInt64](../data_types/int_uint.md) | +| `INT64` | [Int64](../data_types/int_uint.md) | +| `FLOAT`, `HALF_FLOAT` | [Float32](../data_types/float.md) | +| `DOUBLE` | [Float64](../data_types/float.md) | +| `DATE32` | [Date](../data_types/date.md) | +| `DATE64`, `TIMESTAMP` | [DateTime](../data_types/datetime.md) | +| `STRING`, `BINARY` | [Chaîne](../data_types/string.md) | +| `DECIMAL` | [Décimal](../data_types/decimal.md) | + +Clickhouse prend en charge la précision configurable de la `Decimal` type. Le `INSERT` requête traite de l'ORC `DECIMAL` tapez comme le ClickHouse `Decimal128` type. + +Types de données ORC non pris en charge: `DATE32`, `TIME32`, `FIXED_SIZE_BINARY`, `JSON`, `UUID`, `ENUM`. + +Les types de données des colonnes de la table ClickHouse ne doivent pas correspondre aux champs de données Orc correspondants. Lors de l'insertion de données, ClickHouse interprète les types de données selon le tableau ci-dessus, puis [jeter](../query_language/functions/type_conversion_functions/#type_conversion_function-cast) les données du type de données défini pour la colonne clickhouse table. + +### Insertion De Données {#inserting-data-2} + +Vous pouvez insérer des données ORC à partir d'un fichier dans la table ClickHouse par la commande suivante: + +``` bash +$ cat filename.orc | clickhouse-client --query="INSERT INTO some_table FORMAT ORC" +``` + +Pour échanger des données avec Hadoop, vous pouvez utiliser [Moteur de table HDFS](../operations/table_engines/hdfs.md). + +## Schéma De Format {#formatschema} + +Le nom du fichier contenant le schéma de format est défini par le paramètre `format_schema`. +Il est nécessaire de définir ce paramètre lorsqu'il est utilisé dans l'un des formats `Cap'n Proto` et `Protobuf`. +Le format de schéma est une combinaison d'un nom de fichier et le nom d'un type de message dans ce fichier, délimité par une virgule, +e.g. `schemafile.proto:MessageType`. +Si le fichier possède l'extension standard pour le format (par exemple, `.proto` pour `Protobuf`), +il peut être omis et dans ce cas, le format de schéma ressemble `schemafile:MessageType`. + +Si vous entrez ou sortez des données via le [client](../interfaces/cli.md) dans le [mode interactif](../interfaces/cli.md#cli_usage) le nom de fichier spécifié dans le format de schéma +peut contenir un chemin absolu, soit un chemin relatif au répertoire courant sur le client. +Si vous utilisez le client dans le [mode batch](../interfaces/cli.md#cli_usage), le chemin d'accès au schéma doit être relatif pour des raisons de sécurité. + +Si vous entrez ou sortez des données via le [Interface HTTP](../interfaces/http.md) le nom de fichier spécifié dans le format de schéma +doit être situé dans le répertoire spécifié dans [format\_schema\_path](../operations/server_settings/settings.md#server_settings-format_schema_path) +dans la configuration du serveur. + +## Sauter Les Erreurs {#skippingerrors} + +Certains formats tels que `CSV`, `TabSeparated`, `TSKV`, `JSONEachRow`, `Template`, `CustomSeparated` et `Protobuf` pouvez ignorer brisé ligne si erreur d'analyse s'est produite et poursuivre l'analyse à partir du début de la ligne suivante. Voir [input\_format\_allow\_errors\_num](../operations/settings/settings.md#settings-input_format_allow_errors_num) et +[input\_format\_allow\_errors\_ratio](../operations/settings/settings.md#settings-input_format_allow_errors_ratio) paramètre. +Limitation: +- En cas d'erreur d'analyse `JSONEachRow` ignore toutes les données jusqu'à la nouvelle ligne (ou EOF), donc les lignes doivent être délimitées par `\n` pour compter les erreurs correctement. +- `Template` et `CustomSeparated` utilisez delimiter après la dernière colonne et delimiter entre les lignes pour trouver le début de la ligne suivante, donc sauter les erreurs ne fonctionne que si au moins l'une d'entre elles n'est pas vide. + +[Article Original](https://clickhouse.tech/docs/en/interfaces/formats/) diff --git a/docs/fr/interfaces/http.md b/docs/fr/interfaces/http.md new file mode 100644 index 00000000000..a8a6bc5f37d --- /dev/null +++ b/docs/fr/interfaces/http.md @@ -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 "
?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/) diff --git a/docs/fr/interfaces/index.md b/docs/fr/interfaces/index.md new file mode 100644 index 00000000000..99c81e26e1b --- /dev/null +++ b/docs/fr/interfaces/index.md @@ -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/) diff --git a/docs/fr/interfaces/jdbc.md b/docs/fr/interfaces/jdbc.md new file mode 100644 index 00000000000..8912124ff39 --- /dev/null +++ b/docs/fr/interfaces/jdbc.md @@ -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/) diff --git a/docs/fr/interfaces/mysql.md b/docs/fr/interfaces/mysql.md new file mode 100644 index 00000000000..56f798517e7 --- /dev/null +++ b/docs/fr/interfaces/mysql.md @@ -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 +9004 +``` + +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/) diff --git a/docs/fr/interfaces/odbc.md b/docs/fr/interfaces/odbc.md new file mode 100644 index 00000000000..52b9fc7905e --- /dev/null +++ b/docs/fr/interfaces/odbc.md @@ -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/) diff --git a/docs/fr/interfaces/tcp.md b/docs/fr/interfaces/tcp.md new file mode 100644 index 00000000000..a2566ae6a43 --- /dev/null +++ b/docs/fr/interfaces/tcp.md @@ -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/) diff --git a/docs/fr/interfaces/third-party/client_libraries.md b/docs/fr/interfaces/third-party/client_libraries.md new file mode 100644 index 00000000000..7c5e51c6e02 --- /dev/null +++ b/docs/fr/interfaces/third-party/client_libraries.md @@ -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/) diff --git a/docs/fr/interfaces/third-party/gui.md b/docs/fr/interfaces/third-party/gui.md new file mode 100644 index 00000000000..3e6b039dea0 --- /dev/null +++ b/docs/fr/interfaces/third-party/gui.md @@ -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/) diff --git a/docs/fr/interfaces/third-party/integrations.md b/docs/fr/interfaces/third-party/integrations.md new file mode 100644 index 00000000000..fba357772a6 --- /dev/null +++ b/docs/fr/interfaces/third-party/integrations.md @@ -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/) diff --git a/docs/fr/interfaces/third-party/proxy.md b/docs/fr/interfaces/third-party/proxy.md new file mode 100644 index 00000000000..84eea4fe78d --- /dev/null +++ b/docs/fr/interfaces/third-party/proxy.md @@ -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/) diff --git a/docs/fr/introduction/adopters.md b/docs/fr/introduction/adopters.md new file mode 100644 index 00000000000..9f0e2eec474 --- /dev/null +++ b/docs/fr/introduction/adopters.md @@ -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\* | 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/) diff --git a/docs/fr/introduction/distinctive_features.md b/docs/fr/introduction/distinctive_features.md new file mode 100644 index 00000000000..8ae1607d63c --- /dev/null +++ b/docs/fr/introduction/distinctive_features.md @@ -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/) diff --git a/docs/fr/introduction/features_considered_disadvantages.md b/docs/fr/introduction/features_considered_disadvantages.md new file mode 100644 index 00000000000..d6a3886d489 --- /dev/null +++ b/docs/fr/introduction/features_considered_disadvantages.md @@ -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/) diff --git a/docs/fr/introduction/history.md b/docs/fr/introduction/history.md new file mode 100644 index 00000000000..c7a07eb64d0 --- /dev/null +++ b/docs/fr/introduction/history.md @@ -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/) diff --git a/docs/fr/introduction/performance.md b/docs/fr/introduction/performance.md new file mode 100644 index 00000000000..927579f8d31 --- /dev/null +++ b/docs/fr/introduction/performance.md @@ -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/) diff --git a/docs/fr/operations/access_rights.md b/docs/fr/operations/access_rights.md new file mode 100644 index 00000000000..1b7bf384518 --- /dev/null +++ b/docs/fr/operations/access_rights.md @@ -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 + + + + + + + + + + + + default + + + default + + + + + + + web + default + + test + + + test + + + +``` + +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 + + ... + + ::/64 + 203.0.113.0/24 + 2001:DB8::/32 + ... + + +``` + +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 `` 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 `` 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/) diff --git a/docs/fr/operations/backup.md b/docs/fr/operations/backup.md new file mode 100644 index 00000000000..2245cd29817 --- /dev/null +++ b/docs/fr/operations/backup.md @@ -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/) diff --git a/docs/fr/operations/configuration_files.md b/docs/fr/operations/configuration_files.md new file mode 100644 index 00000000000..4ead122eb41 --- /dev/null +++ b/docs/fr/operations/configuration_files.md @@ -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 ``. + +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 + + + + analytics + + ::/0 + + ... + analytics + + + +``` + +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/) diff --git a/docs/fr/operations/index.md b/docs/fr/operations/index.md new file mode 100644 index 00000000000..a6c0a82ef73 --- /dev/null +++ b/docs/fr/operations/index.md @@ -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/) diff --git a/docs/fr/operations/monitoring.md b/docs/fr/operations/monitoring.md new file mode 100644 index 00000000000..7921447910c --- /dev/null +++ b/docs/fr/operations/monitoring.md @@ -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. diff --git a/docs/fr/operations/performance/sampling_query_profiler.md b/docs/fr/operations/performance/sampling_query_profiler.md new file mode 100644 index 00000000000..cc64ed72b68 --- /dev/null +++ b/docs/fr/operations/performance/sampling_query_profiler.md @@ -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" %} +``` diff --git a/docs/fr/operations/performance/sampling_query_profiler_example_result.txt b/docs/fr/operations/performance/sampling_query_profiler_example_result.txt new file mode 120000 index 00000000000..58c5abe7122 --- /dev/null +++ b/docs/fr/operations/performance/sampling_query_profiler_example_result.txt @@ -0,0 +1 @@ +../../../en/operations/performance/sampling_query_profiler_example_result.txt \ No newline at end of file diff --git a/docs/fr/operations/performance_test.md b/docs/fr/operations/performance_test.md new file mode 100644 index 00000000000..dc9fc7f0e4a --- /dev/null +++ b/docs/fr/operations/performance_test.md @@ -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 diff --git a/docs/fr/operations/quotas.md b/docs/fr/operations/quotas.md new file mode 100644 index 00000000000..6b921c5c665 --- /dev/null +++ b/docs/fr/operations/quotas.md @@ -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 + + + + + + + + 3600 + + + 0 + 0 + 0 + 0 + 0 + + +``` + +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 + + + + + 3600 + + 1000 + 100 + 1000000000 + 100000000000 + 900 + + + + 86400 + + 10000 + 1000 + 5000000000 + 500000000000 + 7200 + + +``` + +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 + + + + +``` + +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/) diff --git a/docs/fr/operations/requirements.md b/docs/fr/operations/requirements.md new file mode 100644 index 00000000000..b8baa200f92 --- /dev/null +++ b/docs/fr/operations/requirements.md @@ -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. diff --git a/docs/fr/operations/server_settings/index.md b/docs/fr/operations/server_settings/index.md new file mode 100644 index 00000000000..02e7d5cb305 --- /dev/null +++ b/docs/fr/operations/server_settings/index.md @@ -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/) diff --git a/docs/fr/operations/server_settings/settings.md b/docs/fr/operations/server_settings/settings.md new file mode 100644 index 00000000000..fb5c5c11261 --- /dev/null +++ b/docs/fr/operations/server_settings/settings.md @@ -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 +3600 +``` + +## 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 + + + ... + ... + ... + + ... + +``` + +`` 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 `` 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 + + + 10000000000 + 0.01 + zstd + + +``` + +## 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 +``` + +## 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 +``` + +## 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 +*_dictionary.xml +``` + +## 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 +true +``` + +## 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 + + format_schemas/ +``` + +## 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 `` clause. Par exemple, vous pouvez l'utiliser pour envoyer des données différentes à différents intervalles. + +**Exemple** + +``` xml + + localhost + 42000 + 0.1 + 60 + one_min + true + true + false + true + +``` + +## 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 + + + max + + 0 + 60 + + + 3600 + 300 + + + 86400 + 3600 + + + +``` + +## 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 +0000 +``` + +## 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 + +
]]> +
+``` + +## 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 +/etc/metrica.xml +``` + +## interserver\_http\_port {#interserver-http-port} + +Port pour l'échange de données entre les serveurs ClickHouse. + +**Exemple** + +``` xml +9009 +``` + +## 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 +example.yandex.ru +``` + +## 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 + + admin + 222 + +``` + +## 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 +3 +``` + +## 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 +::1 +127.0.0.1 +``` + +## 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 + + trace + /var/log/clickhouse-server/clickhouse-server.log + /var/log/clickhouse-server/clickhouse-server.err.log + 1000M + 10 + +``` + +L'écriture dans le syslog est également prise en charge. Exemple de Config: + +``` xml + + 1 + +
syslog.remote:10514
+ myhost.local + LOG_LOCAL6 + syslog +
+
+``` + +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 + +``` + +## 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 +5368709120 +``` + +## max\_concurrent\_queries {#max-concurrent-queries} + +Nombre maximal de demandes traitées simultanément. + +**Exemple** + +``` xml +100 +``` + +## max\_connections {#max-connections} + +Le nombre maximal de connexions entrantes. + +**Exemple** + +``` xml +4096 +``` + +## 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 +262144 +``` + +## 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 `/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 +0 +``` + +## 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 + + 5 + +``` + +## 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: ``, `KeyFileHandler`, `test`, ``. +- invalidCertificateHandler – Class (a subclass of CertificateHandler) for verifying invalid certificates. For example: ` ConsoleCertificateHandler ` . +- disableProtocols – Protocols that are not allowed to use. +- preferServerCiphers – Preferred server ciphers on the client. + +**Exemple de paramètres:** + +``` xml + + + + /etc/clickhouse-server/server.crt + /etc/clickhouse-server/server.key + + /etc/clickhouse-server/dhparam.pem + none + true + true + sslv2,sslv3 + true + + + true + true + sslv2,sslv3 + true + + + + RejectCertificateHandler + + + +``` + +## 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 + + system + part_log
+ toMonday(event_date) + 7500 +
+``` + +## 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 +/var/lib/clickhouse/ +``` + +## 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 + + system + query_log
+ toMonday(event_date) + 7500 +
+``` + +## 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 + + system + query_thread_log
+ toMonday(event_date) + 7500 +
+``` + +## 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 + + system + trace_log
+ toYYYYMM(event_date) + 7500 +
+``` + +## 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 + + + hide SSN + (^|\D)\d{3}-\d{2}-\d{4}($|\D) + 000-00-0000 + + +``` + +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 + +``` + +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 +Europe/Moscow +``` + +## tcp\_port {#server_settings-tcp_port} + +Port pour communiquer avec les clients via le protocole TCP. + +**Exemple** + +``` xml +9000 +``` + +## 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 +9440 +``` + +## mysql\_port {#server_settings-mysql_port} + +Port pour communiquer avec les clients via le protocole MySQL. + +**Valeurs possibles** + +Entier positif. + +Exemple + +``` xml +9004 +``` + +## 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 +/var/lib/clickhouse/tmp/ +``` + +## 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 +8589934592 +``` + +## 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 +/var/lib/clickhouse/user_files/ +``` + +## 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.xml +``` + +## 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 + + example_host + 2181 + +``` + + 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 + + + example1 + 2181 + + + example2 + 2181 + + 30000 + 10000 + + /path/to/zookeeper/node + + user:password + +``` + +**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/) diff --git a/docs/fr/operations/settings/constraints_on_settings.md b/docs/fr/operations/settings/constraints_on_settings.md new file mode 100644 index 00000000000..03bc26bf9a9 --- /dev/null +++ b/docs/fr/operations/settings/constraints_on_settings.md @@ -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 + + + + + lower_boundary + + + upper_boundary + + + lower_boundary + upper_boundary + + + + + + + +``` + +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 + + + 10000000000 + 0 + ... + + + 5000000000 + 20000000000 + + + + + + + +``` + +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/) diff --git a/docs/fr/operations/settings/index.md b/docs/fr/operations/settings/index.md new file mode 100644 index 00000000000..df747df3685 --- /dev/null +++ b/docs/fr/operations/settings/index.md @@ -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 ``. + +- 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/) diff --git a/docs/fr/operations/settings/permissions_for_queries.md b/docs/fr/operations/settings/permissions_for_queries.md new file mode 100644 index 00000000000..02d735eb46d --- /dev/null +++ b/docs/fr/operations/settings/permissions_for_queries.md @@ -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/) diff --git a/docs/fr/operations/settings/query_complexity.md b/docs/fr/operations/settings/query_complexity.md new file mode 100644 index 00000000000..bf3e7d2bba8 --- /dev/null +++ b/docs/fr/operations/settings/query_complexity.md @@ -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/) diff --git a/docs/fr/operations/settings/settings.md b/docs/fr/operations/settings/settings.md new file mode 100644 index 00000000000..4fed20c46cd --- /dev/null +++ b/docs/fr/operations/settings/settings.md @@ -0,0 +1,1199 @@ +--- +machine_translated: true +--- + +# Paramètre {#settings} + +## distributed\_product\_mode {#distributed-product-mode} + +Modifie le comportement de [distribués sous-requêtes](../../query_language/select.md). + +ClickHouse applies this setting when the query contains the product of distributed tables, i.e. when the query for a distributed table contains a non-GLOBAL subquery for the distributed table. + +Restriction: + +- Uniquement appliqué pour les sous-requêtes IN et JOIN. +- Uniquement si la section FROM utilise une table distribuée contenant plus d'un fragment. +- Si la sous-requête concerne un distribué tableau contenant plus d'un fragment. +- Pas utilisé pour une table [distant](../../query_language/table_functions/remote.md) fonction. + +Valeurs possibles: + +- `deny` — Default value. Prohibits using these types of subqueries (returns the “Double-distributed in/JOIN subqueries is denied” exception). +- `local` — Replaces the database and table in the subquery with local ones for the destination server (shard), leaving the normal `IN`/`JOIN.` +- `global` — Replaces the `IN`/`JOIN` requête avec `GLOBAL IN`/`GLOBAL JOIN.` +- `allow` — Allows the use of these types of subqueries. + +## enable\_optimize\_predicate\_expression {#enable-optimize-predicate-expression} + +Active la poussée du prédicat `SELECT` requête. + +Prédicat pushdown peut réduire considérablement le trafic réseau pour les requêtes distribuées. + +Valeurs possibles: + +- 0 — Disabled. +- 1 — Enabled. + +Valeur par défaut: 1. + +Utilisation + +Considérez les requêtes suivantes: + +1. `SELECT count() FROM test_table WHERE date = '2018-10-10'` +2. `SELECT count() FROM (SELECT * FROM test_table) WHERE date = '2018-10-10'` + +Si `enable_optimize_predicate_expression = 1`, alors le temps d'exécution de ces requêtes est égal car ClickHouse s'applique `WHERE` à la sous-requête lors du traitement. + +Si `enable_optimize_predicate_expression = 0` puis le temps d'exécution de la deuxième requête est beaucoup plus long, parce que le `WHERE` la clause s'applique à toutes les données après la sous-requête des finitions. + +## fallback\_to\_stale\_replicas\_for\_distributed\_queries {#settings-fallback_to_stale_replicas_for_distributed_queries} + +Force une requête à un réplica obsolète si les données mises à jour ne sont pas disponibles. Voir [Réplication](../table_engines/replication.md). + +ClickHouse sélectionne le plus pertinent parmi les répliques obsolètes de la table. + +Utilisé lors de l'exécution `SELECT` à partir d'une table distribuée qui pointe vers des tables répliquées. + +Par défaut, 1 (activé). + +## force\_index\_by\_date {#settings-force_index_by_date} + +Désactive l'exécution de la requête si l'index ne peut pas être utilisé par jour. + +Fonctionne avec les tables de la famille MergeTree. + +Si `force_index_by_date=1`, Clickhouse vérifie si la requête a une condition de clé de date qui peut être utilisée pour restreindre les plages de données. S'il n'y a pas de condition appropriée, il lève une exception. Cependant, il ne vérifie pas si la condition réduit la quantité de données à lire. Par exemple, la condition `Date != ' 2000-01-01 '` est acceptable même lorsqu'il correspond à toutes les données de la table (c'est-à-dire que l'exécution de la requête nécessite une analyse complète). Pour plus d'informations sur les plages de données dans les tables MergeTree, voir [MergeTree](../table_engines/mergetree.md). + +## force\_primary\_key {#force-primary-key} + +Désactive l'exécution de la requête si l'indexation par la clé primaire n'est pas possible. + +Fonctionne avec les tables de la famille MergeTree. + +Si `force_primary_key=1`, Clickhouse vérifie si la requête a une condition de clé primaire qui peut être utilisée pour restreindre les plages de données. S'il n'y a pas de condition appropriée, il lève une exception. Cependant, il ne vérifie pas si la condition réduit la quantité de données à lire. Pour plus d'informations sur les plages de données dans les tables MergeTree, voir [MergeTree](../table_engines/mergetree.md). + +## format\_schema {#format-schema} + +Ce paramètre est utile lorsque vous utilisez des formats nécessitant une définition de schéma, tels que [Cap'n Proto](https://capnproto.org/) ou [Protobuf](https://developers.google.com/protocol-buffers/). La valeur dépend du format. + +## fsync\_metadata {#fsync-metadata} + +Active ou désactive [fsync](http://pubs.opengroup.org/onlinepubs/9699919799/functions/fsync.html) lors de l'écriture `.sql` fichier. Activé par défaut. + +Il est logique de le désactiver si le serveur a des millions de tables minuscules qui sont constamment créées et détruites. + +## enable\_http\_compression {#settings-enable_http_compression} + +Active ou désactive la compression de données dans la réponse à une requête HTTP. + +Pour plus d'informations, lire l' [Description de L'interface HTTP](../../interfaces/http.md). + +Valeurs possibles: + +- 0 — Disabled. +- 1 — Enabled. + +Valeur par défaut: 0. + +## http\_zlib\_compression\_level {#settings-http_zlib_compression_level} + +Définit le niveau de compression des données dans la réponse à une requête HTTP si [enable\_http\_compression = 1](#settings-enable_http_compression). + +Valeurs possibles: nombres de 1 à 9. + +Valeur par défaut: 3. + +## http\_native\_compression\_disable\_checksumming\_on\_decompress {#settings-http_native_compression_disable_checksumming_on_decompress} + +Active ou désactive la vérification de la somme de contrôle lors de la décompression des données HTTP POST du client. Utilisé uniquement pour le format de compression natif ClickHouse (non utilisé avec `gzip` ou `deflate`). + +Pour plus d'informations, lire l' [Description de L'interface HTTP](../../interfaces/http.md). + +Valeurs possibles: + +- 0 — Disabled. +- 1 — Enabled. + +Valeur par défaut: 0. + +## send\_progress\_in\_http\_headers {#settings-send_progress_in_http_headers} + +Active ou désactive `X-ClickHouse-Progress` - Têtes de réponse HTTP dans `clickhouse-server` réponse. + +Pour plus d'informations, lire l' [Description de L'interface HTTP](../../interfaces/http.md). + +Valeurs possibles: + +- 0 — Disabled. +- 1 — Enabled. + +Valeur par défaut: 0. + +## max\_http\_get\_redirects {#setting-max_http_get_redirects} + +Limite le nombre maximal de sauts de redirection HTTP GET pour [URL](../table_engines/url.md)-tables de moteur. Le paramètre s'applique aux deux types de tables: celles créées par [CREATE TABLE](../../query_language/create/#create-table-query) requête et par la [URL](../../query_language/table_functions/url.md) table de fonction. + +Valeurs possibles: + +- Tout nombre entier positif de houblon. +- 0 — No hops allowed. + +Valeur par défaut: 0. + +## input\_format\_allow\_errors\_num {#settings-input_format_allow_errors_num} + +Définit le nombre maximal d'erreurs acceptables lors de la lecture à partir de formats de texte (CSV, TSV, etc.). + +La valeur par défaut est de 0. + +Toujours le coupler avec `input_format_allow_errors_ratio`. + +Si une erreur s'est produite lors de la lecture de lignes mais que le compteur d'erreurs est toujours inférieur à `input_format_allow_errors_num`, ClickHouse ignore la ligne et passe à la suivante. + +Si les deux `input_format_allow_errors_num` et `input_format_allow_errors_ratio` sont dépassés, ClickHouse lève une exception. + +## input\_format\_allow\_errors\_ratio {#settings-input_format_allow_errors_ratio} + +Définit le pourcentage maximal d'erreurs autorisées lors de la lecture à partir de formats de texte (CSV, TSV, etc.). +Le pourcentage d'erreurs est défini comme un nombre à virgule flottante compris entre 0 et 1. + +La valeur par défaut est de 0. + +Toujours le coupler avec `input_format_allow_errors_num`. + +Si une erreur s'est produite lors de la lecture de lignes mais que le compteur d'erreurs est toujours inférieur à `input_format_allow_errors_ratio`, ClickHouse ignore la ligne et passe à la suivante. + +Si les deux `input_format_allow_errors_num` et `input_format_allow_errors_ratio` sont dépassés, ClickHouse lève une exception. + +## input\_format\_values\_interpret\_expressions {#settings-input_format_values_interpret_expressions} + +Active ou désactive L'analyseur SQL complet si l'analyseur de flux rapide ne peut pas analyser les données. Ce paramètre est utilisé uniquement pour la [Valeur](../../interfaces/formats.md#data-format-values) format lors de l'insertion des données. Pour plus d'informations sur l'analyse syntaxique, consultez [Syntaxe](../../query_language/syntax.md) section. + +Valeurs possibles: + +- 0 — Disabled. + + Dans ce cas, vous devez fournir des données formatées. Voir la [Format](../../interfaces/formats.md) section. + +- 1 — Enabled. + + Dans ce cas, vous pouvez utiliser une expression SQL en tant que valeur, mais l'insertion de données est beaucoup plus lente de cette façon. Si vous insérez uniquement des données formatées, ClickHouse se comporte comme si la valeur de réglage était 0. + +Valeur par défaut: 1. + +Exemple D'utilisation + +Insérez le [DateTime](../../data_types/datetime.md) tapez valeur avec les différents paramètres. + +``` sql +SET input_format_values_interpret_expressions = 0; +INSERT INTO datetime_t VALUES (now()) +``` + +``` text +Exception on client: +Code: 27. DB::Exception: Cannot parse input: expected ) before: now()): (at row 1) +``` + +``` sql +SET input_format_values_interpret_expressions = 1; +INSERT INTO datetime_t VALUES (now()) +``` + +``` text +Ok. +``` + +La dernière requête est équivalente à la suivante: + +``` sql +SET input_format_values_interpret_expressions = 0; +INSERT INTO datetime_t SELECT now() +``` + +``` text +Ok. +``` + +## input\_format\_values\_deduce\_templates\_of\_expressions {#settings-input_format_values_deduce_templates_of_expressions} + +Active ou désactive la déduction de modèle pour une expression SQL dans [Valeur](../../interfaces/formats.md#data-format-values) format. Il permet d'analyser et d'interpréter les expressions dans `Values` beaucoup plus rapide si les expressions dans des lignes consécutives ont la même structure. ClickHouse va essayer de déduire le modèle d'une expression, analyser les lignes suivantes en utilisant ce modèle et évaluer l'expression sur un lot de lignes analysées avec succès. Pour la requête suivante: + +``` sql +INSERT INTO test VALUES (lower('Hello')), (lower('world')), (lower('INSERT')), (upper('Values')), ... +``` + +- si `input_format_values_interpret_expressions=1` et `format_values_deduce_templates_of_expressions=0` les expressions seront interprétées séparément pour chaque ligne (Ceci est très lent pour un grand nombre de lignes) +- si `input_format_values_interpret_expressions=0` et `format_values_deduce_templates_of_expressions=1` expressions dans les première, deuxième et troisième lignes seront analysées à l'aide du modèle `lower(String)` et interprété ensemble, l'expression est la quatrième ligne sera analysée avec un autre modèle (`upper(String)`) +- si `input_format_values_interpret_expressions=1` et `format_values_deduce_templates_of_expressions=1` - la même chose que dans le cas précédent, mais permet également d'interpréter les expressions séparément s'il n'est pas possible de déduire le modèle. + +Activé par défaut. + +## input\_format\_values\_accurate\_types\_of\_literals {#settings-input-format-values-accurate-types-of-literals} + +Ce paramètre est utilisé uniquement lorsque `input_format_values_deduce_templates_of_expressions = 1`. Il peut arriver que les expressions pour une colonne aient la même structure, mais contiennent des littéraux numériques de types différents, par exemple + +``` sql +(..., abs(0), ...), -- UInt64 literal +(..., abs(3.141592654), ...), -- Float64 literal +(..., abs(-1), ...), -- Int64 literal +``` + +Lorsque ce paramètre est activé, ClickHouse vérifie le type réel de littéral et utilise un modèle d'expression du type correspondant. Dans certains cas, cela peut considérablement ralentir l'évaluation de l'expression dans `Values`. +When disabled, ClickHouse may use more general type for some literals (e.g. `Float64` ou `Int64` plutôt `UInt64` pour `42`), mais cela peut causer des problèmes de débordement et de précision. +Activé par défaut. + +## input\_format\_defaults\_for\_omitted\_fields {#session_settings-input_format_defaults_for_omitted_fields} + +Lors de l'exécution de `INSERT` requêtes, remplacez les valeurs de colonne d'entrée omises par les valeurs par défaut des colonnes respectives. Cette option s'applique uniquement aux [JSONEachRow](../../interfaces/formats.md#jsoneachrow), [CSV](../../interfaces/formats.md#csv) et [TabSeparated](../../interfaces/formats.md#tabseparated) format. + +!!! note "Note" + Lorsque cette option est activée, les métadonnées de table étendues sont envoyées du serveur au client. Il consomme des ressources informatiques supplémentaires sur le serveur et peut réduire les performances. + +Valeurs possibles: + +- 0 — Disabled. +- 1 — Enabled. + +Valeur par défaut: 1. + +## input\_format\_tsv\_empty\_as\_default {#settings-input-format-tsv-empty-as-default} + +Lorsque cette option est activée, remplacez les champs de saisie vides dans TSV par des valeurs par défaut. Pour les expressions par défaut complexes `input_format_defaults_for_omitted_fields` doit être activé en trop. + +Désactivé par défaut. + +## input\_format\_null\_as\_default {#settings-input-format-null-as-default} + +Active ou désactive l'utilisation des valeurs par défaut si les données `NULL` mais le type de données de la colonne correspondante dans pas `Nullable(T)` (pour les formats de saisie de texte). + +## input\_format\_skip\_unknown\_fields {#settings-input-format-skip-unknown-fields} + +Active ou désactive le saut d'insertion de données supplémentaires. + +Lors de l'écriture de données, ClickHouse lève une exception si les données d'entrée contiennent des colonnes qui n'existent pas dans la table cible. Si le saut est activé, ClickHouse n'insère pas de données supplémentaires et ne lance pas d'exception. + +Formats pris en charge: + +- [JSONEachRow](../../interfaces/formats.md#jsoneachrow) +- [CSVWithNames](../../interfaces/formats.md#csvwithnames) +- [TabSeparatedWithNames](../../interfaces/formats.md#tabseparatedwithnames) +- [TSKV](../../interfaces/formats.md#tskv) + +Valeurs possibles: + +- 0 — Disabled. +- 1 — Enabled. + +Valeur par défaut: 0. + +## input\_format\_import\_nested\_json {#settings-input_format_import_nested_json} + +Active ou désactive l'insertion de données JSON avec des objets imbriqués. + +Formats pris en charge: + +- [JSONEachRow](../../interfaces/formats.md#jsoneachrow) + +Valeurs possibles: + +- 0 — Disabled. +- 1 — Enabled. + +Valeur par défaut: 0. + +Voir aussi: + +- [Utilisation de Structures imbriquées](../../interfaces/formats.md#jsoneachrow-nested) avec l' `JSONEachRow` format. + +## input\_format\_with\_names\_use\_header {#settings-input-format-with-names-use-header} + +Active ou désactive la vérification de l'ordre des colonnes lors de l'insertion de données. + +Pour améliorer les performances d'insertion, nous vous recommandons de désactiver cette vérification si vous êtes sûr que l'ordre des colonnes des données d'entrée est le même que dans la table cible. + +Formats pris en charge: + +- [CSVWithNames](../../interfaces/formats.md#csvwithnames) +- [TabSeparatedWithNames](../../interfaces/formats.md#tabseparatedwithnames) + +Valeurs possibles: + +- 0 — Disabled. +- 1 — Enabled. + +Valeur par défaut: 1. + +## date\_time\_input\_format {#settings-date_time_input_format} + +Permet de choisir un analyseur de la représentation textuelle de la date et de l'heure. + +Le réglage ne s'applique pas à [fonctions date et heure](../../query_language/functions/date_time_functions.md). + +Valeurs possibles: + +- `'best_effort'` — Enables extended parsing. + + ClickHouse peut analyser la base `YYYY-MM-DD HH:MM:SS` format et tous [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) formats de date et heure. Exemple, `'2018-06-08T01:02:03.000Z'`. + +- `'basic'` — Use basic parser. + + ClickHouse ne peut analyser que la base `YYYY-MM-DD HH:MM:SS` format. Exemple, `'2019-08-20 10:18:56'`. + +Valeur par défaut: `'basic'`. + +Voir aussi: + +- [Type de données DateTime.](../../data_types/datetime.md) +- [Fonctions pour travailler avec des dates et des heures.](../../query_language/functions/date_time_functions.md) + +## join\_default\_strictness {#settings-join_default_strictness} + +Définit la rigueur par défaut pour [JOIN clauses](../../query_language/select.md#select-join). + +Valeurs possibles: + +- `ALL` — If the right table has several matching rows, ClickHouse creates a [Produit cartésien](https://en.wikipedia.org/wiki/Cartesian_product) à partir des lignes correspondantes. C'est normal `JOIN` comportement de SQL standard. +- `ANY` — If the right table has several matching rows, only the first one found is joined. If the right table has only one matching row, the results of `ANY` et `ALL` sont les mêmes. +- `ASOF` — For joining sequences with an uncertain match. +- `Empty string` — If `ALL` ou `ANY` n'est pas spécifié dans la requête, ClickHouse lève une exception. + +Valeur par défaut: `ALL`. + +## join\_any\_take\_last\_row {#settings-join_any_take_last_row} + +Modifie le comportement des opérations de jointure avec `ANY` rigueur. + +!!! warning "Attention" + Ce paramètre s'applique uniquement pour `JOIN` opérations avec [Rejoindre](../table_engines/join.md) le moteur de tables. + +Valeurs possibles: + +- 0 — If the right table has more than one matching row, only the first one found is joined. +- 1 — If the right table has more than one matching row, only the last one found is joined. + +Valeur par défaut: 0. + +Voir aussi: + +- [Clause de JOINTURE](../../query_language/select.md#select-join) +- [Rejoindre le moteur de table](../table_engines/join.md) +- [join\_default\_strictness](#settings-join_default_strictness) + +## join\_use\_nulls {#join_use_nulls} + +Définit le type de [JOIN](../../query_language/select.md) comportement. Lors de la fusion de tables, des cellules vides peuvent apparaître. ClickHouse les remplit différemment en fonction de ce paramètre. + +Valeurs possibles: + +- 0 — The empty cells are filled with the default value of the corresponding field type. +- 1 — `JOIN` se comporte de la même manière que dans SQL standard. Le type du champ correspondant est converti en [Nullable](../../data_types/nullable.md#data_type-nullable) et les cellules vides sont remplis avec [NULL](../../query_language/syntax.md). + +Valeur par défaut: 0. + +## max\_block\_size {#setting-max_block_size} + +Dans ClickHouse, les données sont traitées par Blocs (Ensembles de parties de colonne). Les cycles de traitement internes pour un seul bloc sont assez efficaces, mais il y a des dépenses notables sur chaque bloc. Le `max_block_size` le paramètre est une recommandation pour la taille du bloc (dans un nombre de lignes) à charger à partir des tables. La taille du bloc ne doit pas être trop petite, de sorte que les dépenses sur chaque bloc sont toujours perceptibles, mais pas trop grande pour que la requête avec limite qui est terminée après le premier bloc soit traitée rapidement. L'objectif est d'éviter de consommer trop de mémoire lors de l'extraction d'un grand nombre de colonnes dans plusieurs threads et de préserver au moins certains localité de cache. + +Valeur par défaut: de 65 536. + +Les blocs de la taille de `max_block_size` ne sont pas toujours chargées de la table. Si il est évident que moins de données doivent être récupérées, un bloc plus petit est traitée. + +## preferred\_block\_size\_bytes {#preferred-block-size-bytes} + +Utilisé dans le même but que `max_block_size`, mais il définit la taille de bloc recommandée en octets en l'adaptant au nombre de lignes dans le bloc. +Cependant, la taille du bloc ne peut pas être supérieure à `max_block_size` rangée. +Par défaut: 1 000 000. Cela ne fonctionne que lors de la lecture des moteurs MergeTree. + +## merge\_tree\_min\_rows\_for\_concurrent\_read {#setting-merge-tree-min-rows-for-concurrent-read} + +Si le nombre de lignes à lire à partir d'un fichier d'un [MergeTree](../table_engines/mergetree.md) table dépasse `merge_tree_min_rows_for_concurrent_read` ensuite, ClickHouse essaie d'effectuer une lecture simultanée de ce fichier sur plusieurs threads. + +Valeurs possibles: + +- Tout nombre entier positif. + +Valeur par défaut: 163840. + +## merge\_tree\_min\_bytes\_for\_concurrent\_read {#setting-merge-tree-min-bytes-for-concurrent-read} + +Si le nombre d'octets à lire à partir d'un fichier d'un [MergeTree](../table_engines/mergetree.md)- table de moteur dépasse `merge_tree_min_bytes_for_concurrent_read` puis ClickHouse essaie de lire simultanément à partir de ce fichier dans plusieurs threads. + +Valeur Possible: + +- Tout nombre entier positif. + +Valeur par défaut: 251658240. + +## merge\_tree\_min\_rows\_for\_seek {#setting-merge-tree-min-rows-for-seek} + +Si la distance entre deux blocs de données à lire dans un fichier est inférieure à `merge_tree_min_rows_for_seek` lignes, puis ClickHouse ne cherche pas à travers le fichier mais lit les données séquentiellement. + +Valeurs possibles: + +- Tout nombre entier positif. + +Valeur par défaut: 0. + +## merge\_tree\_min\_bytes\_for\_seek {#setting-merge-tree-min-bytes-for-seek} + +Si la distance entre deux blocs de données à lire dans un fichier est inférieure à `merge_tree_min_bytes_for_seek` octets, puis ClickHouse lit séquentiellement une plage de fichier qui contient les deux blocs, évitant ainsi la recherche supplémentaire. + +Valeurs possibles: + +- Tout nombre entier positif. + +Valeur par défaut: 0. + +## merge\_tree\_coarse\_index\_granularité {#setting-merge-tree-coarse-index-granularity} + +Lors de la recherche de données, ClickHouse vérifie les marques de données dans le fichier d'index. Si ClickHouse trouve que les clés requises sont dans une certaine plage, il divise cette plage en `merge_tree_coarse_index_granularity` subranges et recherche les clés requises récursivement. + +Valeurs possibles: + +- Tout entier pair positif. + +Valeur par défaut: 8. + +## merge\_tree\_max\_rows\_to\_use\_cache {#setting-merge-tree-max-rows-to-use-cache} + +Si ClickHouse devrait lire plus de `merge_tree_max_rows_to_use_cache` lignes dans une requête, il n'utilise pas le cache des blocs non compressés. + +Le cache des blocs non compressés stocke les données extraites pour les requêtes. ClickHouse utilise ce cache pour accélérer les réponses aux petites requêtes répétées. Ce paramètre protège le cache contre le saccage par les requêtes qui lisent une grande quantité de données. Le [uncompressed\_cache\_size](../server_settings/settings.md#server-settings-uncompressed_cache_size) le paramètre serveur définit la taille du cache des blocs non compressés. + +Valeurs possibles: + +- Tout nombre entier positif. + +Default value: 128 ✕ 8192. + +## merge\_tree\_max\_bytes\_to\_use\_cache {#setting-merge-tree-max-bytes-to-use-cache} + +Si ClickHouse devrait lire plus de `merge_tree_max_bytes_to_use_cache` octets dans une requête, il n'utilise pas le cache de non compressé blocs. + +Le cache des blocs non compressés stocke les données extraites pour les requêtes. ClickHouse utilise ce cache pour accélérer les réponses aux petites requêtes répétées. Ce paramètre protège le cache contre le saccage par les requêtes qui lisent une grande quantité de données. Le [uncompressed\_cache\_size](../server_settings/settings.md#server-settings-uncompressed_cache_size) le paramètre serveur définit la taille du cache des blocs non compressés. + +Valeur Possible: + +- Tout nombre entier positif. + +Valeur par défaut: 2013265920. + +## min\_bytes\_to\_use\_direct\_io {#settings-min-bytes-to-use-direct-io} + +Volume de données minimum requis pour utiliser l'accès direct aux E/S sur le disque de stockage. + +ClickHouse utilise ce paramètre lors de la lecture de données à partir de tables. Si le volume total de stockage de toutes les données à lire dépasse `min_bytes_to_use_direct_io` octets, puis ClickHouse lit les données du disque de stockage avec le `O_DIRECT` option. + +Valeurs possibles: + +- 0 — Direct I/O is disabled. +- Entier positif. + +Valeur par défaut: 0. + +## log\_queries {#settings-log-queries} + +Configuration de la journalisation des requêtes. + +Les requêtes envoyées à ClickHouse avec cette configuration sont enregistrées selon les règles du [query\_log](../server_settings/settings.md#server_settings-query-log) paramètre de configuration du serveur. + +Exemple: + +``` text +log_queries=1 +``` + +## log\_query\_threads {#settings-log-query-threads} + +Configuration de la journalisation des threads de requête. + +Les threads de requêtes exécutés par ClickHouse avec cette configuration sont journalisés selon les règles du [query\_thread\_log](../server_settings/settings.md#server_settings-query-thread-log) paramètre de configuration du serveur. + +Exemple: + +``` text +log_query_threads=1 +``` + +## max\_insert\_block\_size {#settings-max_insert_block_size} + +La taille des blocs à former pour l'insertion dans une table. +Ce paramètre s'applique uniquement dans les cas où le serveur formes les blocs. +Par exemple, pour une insertion via L'interface HTTP, le serveur analyse le format de données et forme des blocs de la taille spécifiée. +Mais lors de l'utilisation de clickhouse-client, le client analyse les données ‘max\_insert\_block\_size’ le réglage sur le serveur n'affecte pas la taille des blocs insérés. +Le paramètre n'a pas non plus de but lors de L'utilisation D'INSERT SELECT, car les données sont insérées à l'aide des mêmes blocs qui sont formés après SELECT. + +Valeur par défaut: 1 048 576 octets. + +La valeur par défaut est légèrement supérieure à `max_block_size`. La raison en est que certains moteurs de table (`*MergeTree`) former une partie de données sur le disque pour chaque bloc inséré, qui est une entité assez grande. Pareillement, `*MergeTree` les tables trient les données lors de l'insertion et une taille de bloc suffisamment grande permet de trier plus de données dans la RAM. + +## max\_replica\_delay\_for\_distributed\_queries {#settings-max_replica_delay_for_distributed_queries} + +Désactive les répliques en retard pour les requêtes distribuées. Voir [Réplication](../../operations/table_engines/replication.md). + +Définit le temps en secondes. Si une réplique accuse plus de retard que la valeur définie, cette réplique n'est pas utilisée. + +Valeur par défaut: 300. + +Utilisé lors de l'exécution `SELECT` à partir d'une table distribuée qui pointe vers des tables répliquées. + +## max\_threads {#settings-max_threads} + +Nombre maximal de threads de traitement des requêtes, à l'exclusion des threads de récupération de données à partir de serveurs distants (voir ‘max\_distributed\_connections’ paramètre). + +Ce paramètre s'applique aux threads qui effectuent les mêmes étapes du pipeline de traitement des requêtes en parallèle. +Par exemple, lors de la lecture d'une table, s'il est possible d'évaluer des expressions avec des fonctions, filtrer avec WHERE et pré-agréger pour GROUP BY en parallèle en utilisant au moins ‘max\_threads’ nombre de threads, puis ‘max\_threads’ sont utilisés. + +Valeur par défaut: nombre de cœurs de processeur physiques. + +Si moins d'une requête SELECT est normalement exécutée sur un serveur à la fois, définissez ce paramètre sur une valeur légèrement inférieure au nombre réel de cœurs de processeur. + +Pour les requêtes qui sont terminées rapidement en raison d'une limite, vous pouvez définir une valeur inférieure ‘max\_threads’. Par exemple, si le nombre d'entrées se trouvent dans chaque bloc et max\_threads = 8, 8 blocs sont récupérées, même s'il aurait été suffisante pour lire un seul. + +Le plus petit de la `max_threads` valeur, moins la mémoire est consommée. + +## max\_insert\_threads {#settings-max-insert-threads} + +Nombre maximal de threads à exécuter `INSERT SELECT` requête. + +Valeurs possibles: + +- 0 (or 1) — `INSERT SELECT` pas d'exécution parallèle. +- Entier positif. Plus grand que 1. + +Valeur par défaut: 0. + +Parallèle `INSERT SELECT` n'a d'effet que si l' `SELECT` une partie est exécutée en parallèle, voir [max\_threads](#settings-max_threads) paramètre. +Des valeurs plus élevées conduiront à une utilisation de la mémoire plus élevée. + +## max\_compress\_block\_size {#max-compress-block-size} + +La taille maximale des blocs de données non compressées avant la compression pour l'écriture dans une table. Par défaut, 1 048 576 (1 MiB). Si la taille est réduite, le taux de compression est considérablement réduit, la vitesse de compression et de décompression augmente légèrement en raison de la localisation du cache, et la consommation de mémoire est réduite. Il n'y aucune raison de modifier ce paramètre. + +Ne confondez pas les blocs pour la compression (un morceau de mémoire constitué d'octets) avec des blocs pour le traitement des requêtes (Un ensemble de lignes d'une table). + +## min\_compress\_block\_size {#min-compress-block-size} + +Pour [MergeTree](../table_engines/mergetree.md)" table. Afin de réduire la latence lors du traitement des requêtes, un bloc est compressé lors de l'écriture de la marque suivante si sa taille est au moins ‘min\_compress\_block\_size’. Par défaut, 65 536. + +La taille réelle du bloc, si les données non compressées sont inférieures à ‘max\_compress\_block\_size’ pas moins de cette valeur et pas moins que le volume de données pour une marque. + +Regardons un exemple. Supposons que ‘index\_granularity’ a 8192 lors de la création de la table. + +Nous écrivons une colonne de type UInt32 (4 octets par valeur). Lors de l'écriture de 8192 lignes, le total sera de 32 KO de données. Puisque min\_compress\_block\_size = 65 536, un bloc compressé sera formé pour toutes les deux marques. + +Nous écrivons une colonne URL avec le type de chaîne (taille moyenne de 60 octets par valeur). Lors de l'écriture de 8192 lignes, la moyenne sera légèrement inférieure à 500 Ko de données. Comme il s'agit de plus de 65 536, un bloc compressé sera formé pour chaque marque. Dans ce cas, lors de la lecture de données du disque dans la plage d'une seule marque, les données supplémentaires ne seront pas décompressées. + +Il n'y aucune raison de modifier ce paramètre. + +## max\_query\_size {#settings-max_query_size} + +La partie maximale d'une requête qui peut être prise en RAM pour l'analyse avec L'analyseur SQL. +La requête INSERT contient également des données pour INSERT qui sont traitées par un analyseur de flux séparé (qui consomme O (1) RAM), qui n'est pas inclus dans cette restriction. + +Valeur par défaut: 256 Ko. + +## interactive\_delay {#interactive-delay} + +Intervalle en microsecondes pour vérifier si l'exécution de la requête a été annulée et envoyer la progression. + +Valeur par défaut: 100 000 (vérifie l'Annulation et envoie la progression dix fois par seconde). + +## connect\_timeout, receive\_timeout, send\_timeout {#connect-timeout-receive-timeout-send-timeout} + +Délais d'attente en secondes sur le socket utilisé pour communiquer avec le client. + +Valeur par défaut: 10, 300, 300. + +## cancel\_http\_readonly\_queries\_on\_client\_close {#cancel-http-readonly-queries-on-client-close} + +Cancels HTTP read-only queries (e.g. SELECT) when a client closes the connection without waiting for the response. + +Valeur par défaut: 0 + +## poll\_interval {#poll-interval} + +Verrouillez une boucle d'attente pendant le nombre de secondes spécifié. + +Valeur par défaut: 10. + +## max\_distributed\_connections {#max-distributed-connections} + +Nombre maximal de connexions simultanées avec des serveurs distants pour le traitement distribué d'une seule requête vers une seule table distribuée. Nous vous recommandons de définir une valeur au moins égale au nombre de serveurs dans le cluster. + +Valeur par défaut: 1024. + +Les paramètres suivants ne sont utilisés que lors de la création de tables distribuées (et lors du lancement d'un serveur), il n'y a donc aucune raison de les modifier lors de l'exécution. + +## distributed\_connections\_pool\_size {#distributed-connections-pool-size} + +Nombre maximal de connexions simultanées avec des serveurs distants pour le traitement distribué de toutes les requêtes vers une seule table distribuée. Nous vous recommandons de définir une valeur au moins égale au nombre de serveurs dans le cluster. + +Valeur par défaut: 1024. + +## connect\_timeout\_with\_failover\_ms {#connect-timeout-with-failover-ms} + +Délai d'attente en millisecondes pour la connexion à un serveur distant pour un moteur de table distribué, si ‘shard’ et ‘replica’ les sections sont utilisées dans la définition du cluster. +En cas d'échec, plusieurs tentatives sont faites pour se connecter à diverses répliques. + +Valeur par défaut: 50. + +## connections\_with\_failover\_max\_tries {#connections-with-failover-max-tries} + +Nombre maximal de tentatives de connexion avec chaque réplique pour le moteur de table distribué. + +Valeur par défaut: 3. + +## extrême {#extremes} + +Indique s'il faut compter les valeurs extrêmes (les minimums et les maximums dans les colonnes d'un résultat de requête). Accepte 0 ou 1. Par défaut, 0 (désactivé). +Pour plus d'informations, consultez la section “Extreme values”. + +## use\_uncompressed\_cache {#setting-use_uncompressed_cache} + +Indique s'il faut utiliser un cache de blocs non compressés. Accepte 0 ou 1. Par défaut, 0 (désactivé). +L'utilisation du cache non compressé (uniquement pour les tables de la famille MergeTree) peut réduire considérablement la latence et augmenter le débit lorsque vous travaillez avec un grand nombre de requêtes courtes. Activez ce paramètre pour les utilisateurs qui envoient des requêtes courtes fréquentes. Faites également attention à la [uncompressed\_cache\_size](../server_settings/settings.md#server-settings-uncompressed_cache_size) configuration parameter (only set in the config file) – the size of uncompressed cache blocks. By default, it is 8 GiB. The uncompressed cache is filled in as needed and the least-used data is automatically deleted. + +Pour les requêtes qui lisent au moins un volume de données assez important (un million de lignes ou plus), le cache non compressé est désactivé automatiquement pour économiser de l'espace pour les requêtes vraiment petites. Cela signifie que vous pouvez garder la ‘use\_uncompressed\_cache’ toujours la valeur 1. + +## replace\_running\_query {#replace-running-query} + +Lors de l'utilisation de L'interface HTTP, le ‘query\_id’ le paramètre peut être passé. C'est n'importe quelle chaîne qui sert d'Identificateur de requête. +Si une requête d'un utilisateur avec le même ‘query\_id’ il existe déjà à ce moment, le comportement dépend de la ‘replace\_running\_query’ paramètre. + +`0` (default) – Throw an exception (don't allow the query to run if a query with the same ‘query\_id’ est déjà en cours d'exécution). + +`1` – Cancel the old query and start running the new one. + +Yandex.Metrica utilise ce paramètre défini sur 1 pour implémenter des suggestions de conditions de segmentation. Après avoir entré le caractère suivant, si l'ancienne requête n'est pas encore terminée, elle doit être annulée. + +## stream\_flush\_interval\_ms {#stream-flush-interval-ms} + +Fonctionne pour les tables avec des flux dans le cas d'une expiration, ou lorsqu'un thread génère [max\_insert\_block\_size](#settings-max_insert_block_size) rangée. + +La valeur par défaut est 7500. + +Plus la valeur est petite, plus les données sont vidées dans la table. Régler la valeur trop faible entraîne de mauvaises performances. + +## équilibrage {#settings-load_balancing} + +Spécifie l'algorithme de sélection des réplicas utilisé pour le traitement des requêtes distribuées. + +ClickHouse prend en charge les algorithmes suivants de choix des répliques: + +- [Aléatoire](#load_balancing-random) (par défaut) +- [Nom d'hôte le plus proche](#load_balancing-nearest_hostname) +- [Afin](#load_balancing-in_order) +- [Premier ou aléatoire](#load_balancing-first_or_random) + +### Aléatoire (par défaut) {#load_balancing-random} + +``` sql +load_balancing = random +``` + +Le nombre d'erreurs est compté pour chaque réplique. La requête est envoyée au réplica avec le moins d'erreurs, et s'il y en a plusieurs, à n'importe qui d'entre eux. +Inconvénients: la proximité du serveur n'est pas prise en compte; si les répliques ont des données différentes, vous obtiendrez également des données différentes. + +### Nom D'Hôte Le Plus Proche {#load_balancing-nearest_hostname} + +``` sql +load_balancing = nearest_hostname +``` + +The number of errors is counted for each replica. Every 5 minutes, the number of errors is integrally divided by 2. Thus, the number of errors is calculated for a recent time with exponential smoothing. If there is one replica with a minimal number of errors (i.e. errors occurred recently on the other replicas), the query is sent to it. If there are multiple replicas with the same minimal number of errors, the query is sent to the replica with a hostname that is most similar to the server's hostname in the config file (for the number of different characters in identical positions, up to the minimum length of both hostnames). + +Par exemple, exemple01-01-1 et example01-01-2.yandex.ru sont différents dans une position, tandis que l'exemple01-01-1 et l'exemple01-02-2 diffèrent dans deux endroits. +Cette méthode peut sembler primitive, mais elle ne nécessite pas de données externes sur la topologie du réseau, et elle ne compare pas les adresses IP, ce qui serait compliqué pour nos adresses IPv6. + +Ainsi, s'il existe des répliques équivalentes, la plus proche par son nom est préférée. +Nous pouvons également supposer que lors de l'envoi d'une requête au même serveur, en l'absence d'Échecs, une requête distribuée ira également aux mêmes serveurs. Ainsi, même si des données différentes sont placées sur les répliques, la requête retournera principalement les mêmes résultats. + +### Afin {#load_balancing-in_order} + +``` sql +load_balancing = in_order +``` + +Répliques avec le même nombre d'erreurs sont accessibles dans le même ordre qu'ils sont définis dans la configuration. +Cette méthode est appropriée lorsque vous savez exactement quelle réplique est préférable. + +### Premier ou aléatoire {#load_balancing-first_or_random} + +``` sql +load_balancing = first_or_random +``` + +Cet algorithme choisit la première réplique de l'ensemble ou une réplique aléatoire si la première n'est pas disponible. Il est efficace dans les configurations de topologie de réplication croisée, mais inutile dans d'autres configurations. + +Le `first_or_random` algorithme résout le problème de la `in_order` algorithme. Avec `in_order`, si une réplique tombe en panne, la suivante obtient une double charge tandis que les répliques restantes gèrent la quantité habituelle de trafic. Lors de l'utilisation de la `first_or_random` algorithme, la charge est répartie uniformément entre les répliques qui sont encore disponibles. + +## prefer\_localhost\_replica {#settings-prefer-localhost-replica} + +Active / désactive préférable d'utiliser le réplica localhost lors du traitement des requêtes distribuées. + +Valeurs possibles: + +- 1 — ClickHouse always sends a query to the localhost replica if it exists. +- 0 — ClickHouse uses the balancing strategy specified by the [équilibrage](#settings-load_balancing) paramètre. + +Valeur par défaut: 1. + +!!! warning "Avertissement" + Désactivez ce paramètre si vous utilisez [max\_parallel\_replicas](#settings-max_parallel_replicas). + +## totals\_mode {#totals-mode} + +Comment calculer les totaux lorsque HAVING est présent, ainsi que lorsque max\_rows\_to\_group\_by et group\_by\_overflow\_mode = ‘any’ sont présents. +Voir la section “WITH TOTALS modifier”. + +## totals\_auto\_threshold {#totals-auto-threshold} + +Le seuil de `totals_mode = 'auto'`. +Voir la section “WITH TOTALS modifier”. + +## max\_parallel\_replicas {#settings-max_parallel_replicas} + +Nombre maximal de répliques pour chaque fragment lors de l'exécution d'une requête. +Par souci de cohérence (pour obtenir différentes parties du même partage de données), Cette option ne fonctionne que lorsque la clé d'échantillonnage est définie. +Le retard de réplique n'est pas contrôlé. + +## compiler {#compile} + +Activer la compilation des requêtes. Par défaut, 0 (désactivé). + +La compilation n'est utilisée que pour une partie du pipeline de traitement des requêtes: pour la première étape de l'agrégation (GROUP BY). +Si cette partie du pipeline a été compilée, la requête peut s'exécuter plus rapidement en raison du déploiement de cycles courts et des appels de fonction d'agrégation intégrés. L'amélioration maximale des performances (jusqu'à quatre fois plus rapide dans de rares cas) est observée pour les requêtes avec plusieurs fonctions d'agrégat simples. Typiquement, le gain de performance est insignifiant. Dans de très rares cas, il peut ralentir l'exécution de la requête. + +## min\_count\_to\_compile {#min-count-to-compile} + +Combien de fois utiliser potentiellement un morceau de code compilé avant d'exécuter la compilation. Par défaut, 3. +For testing, the value can be set to 0: compilation runs synchronously and the query waits for the end of the compilation process before continuing execution. For all other cases, use values ​​starting with 1. Compilation normally takes about 5-10 seconds. +Si la valeur est 1 ou plus, la compilation se produit de manière asynchrone dans un thread séparé. Le résultat sera utilisé dès qu'il sera prêt, y compris les requêtes en cours d'exécution. + +Le code compilé est requis pour chaque combinaison différente de fonctions d'agrégat utilisées dans la requête et le type de clés dans la clause GROUP BY. +The results of the compilation are saved in the build directory in the form of .so files. There is no restriction on the number of compilation results since they don't use very much space. Old results will be used after server restarts, except in the case of a server upgrade – in this case, the old results are deleted. + +## output\_format\_json\_quote\_64bit\_integers {#session_settings-output_format_json_quote_64bit_integers} + +Si la valeur est true, les entiers apparaissent entre guillemets lors de l'utilisation des formats JSON\* Int64 et UInt64 (pour la compatibilité avec la plupart des implémentations JavaScript); sinon, les entiers sont sortis sans les guillemets. + +## format\_csv\_delimiter {#settings-format_csv_delimiter} + +Caractère interprété comme un délimiteur dans les données CSV. Par défaut, le délimiteur est `,`. + +## input\_format\_csv\_unquoted\_null\_literal\_as\_null {#settings-input_format_csv_unquoted_null_literal_as_null} + +Pour le format D'entrée CSV active ou désactive l'analyse des `NULL` comme littéral (synonyme de `\N`). + +## output\_format\_csv\_crlf\_end\_of\_line {#settings-output-format-csv-crlf-end-of-line} + +Utilisez le séparateur de ligne de style DOS/Windows (CRLF) en CSV au lieu du style Unix (LF). + +## output\_format\_tsv\_crlf\_end\_of\_line {#settings-output-format-tsv-crlf-end-of-line} + +Utilisez le séparateur de ligne de style DOC/Windows (CRLF) dans TSV au lieu du style Unix (LF). + +## insert\_quorum {#settings-insert_quorum} + +Active les Écritures de quorum. + +- Si `insert_quorum < 2`, les Écritures de quorum sont désactivées. +- Si `insert_quorum >= 2`, les Écritures de quorum sont activées. + +Valeur par défaut: 0. + +Quorum écrit + +`INSERT` ne réussit que lorsque ClickHouse parvient à écrire correctement les données `insert_quorum` des répliques au cours de la `insert_quorum_timeout`. Si, pour une raison quelconque, le nombre de répliques avec succès écrit n'atteint pas le `insert_quorum`, l'écriture est considérée comme ayant échoué et ClickHouse supprimera le bloc inséré de toutes les répliques où les données ont déjà été écrites. + +Toutes les répliques du quorum sont cohérentes, c'est-à-dire qu'elles contiennent des données de toutes les `INSERT` requête. Le `INSERT` la séquence est linéarisé. + +Lors de la lecture des données écrites à partir du `insert_quorum`, vous pouvez utiliser le [select\_sequential\_consistency](#settings-select_sequential_consistency) option. + +Clickhouse génère une exception + +- Si le nombre de répliques au moment de la requête est inférieure à la `insert_quorum`. +- Lors d'une tentative d'écriture de données lorsque le bloc précédent n'a pas encore été inséré dans le `insert_quorum` des répliques. Cette situation peut se produire si l'utilisateur tente d'effectuer une `INSERT` avant le précédent avec le `insert_quorum` est terminé. + +Voir aussi: + +- [insert\_quorum\_timeout](#settings-insert_quorum_timeout) +- [select\_sequential\_consistency](#settings-select_sequential_consistency) + +## insert\_quorum\_timeout {#settings-insert_quorum-timeout} + +Ecrire dans quorum timeout en secondes. Si le délai d'attente est passé et qu'aucune écriture n'a encore eu lieu, ClickHouse génère une exception et le client doit répéter la requête pour écrire le même bloc dans le même réplica ou tout autre réplica. + +Valeur par défaut: 60 secondes. + +Voir aussi: + +- [insert\_quorum](#settings-insert_quorum) +- [select\_sequential\_consistency](#settings-select_sequential_consistency) + +## select\_sequential\_consistency {#settings-select_sequential_consistency} + +Active ou désactive la cohérence séquentielle pour `SELECT` requête: + +Valeurs possibles: + +- 0 — Disabled. +- 1 — Enabled. + +Valeur par défaut: 0. + +Utilisation + +Lorsque la cohérence séquentielle est activée, ClickHouse permet au client d'exécuter `SELECT` requête uniquement pour les répliques qui contiennent des données de toutes les `INSERT` requêtes exécutées avec `insert_quorum`. Si le client fait référence à une réplique partielle, ClickHouse génère une exception. La requête SELECT n'inclut pas les données qui n'ont pas encore été écrites dans le quorum des répliques. + +Voir aussi: + +- [insert\_quorum](#settings-insert_quorum) +- [insert\_quorum\_timeout](#settings-insert_quorum_timeout) + +## insert\_deduplicate {#settings-insert-deduplicate} + +Active ou désactive la déduplication des blocs `INSERT` (Répliqués\* les tableaux). + +Valeurs possibles: + +- 0 — Disabled. +- 1 — Enabled. + +Valeur par défaut: 1. + +Par défaut, les blocs insérés dans les tables répliquées `INSERT` déclaration sont dédupliquées (voir \[Réplication de Données\] (../ table\_engines / replication. md). + +## déduplicate\_blocks\_in\_dependent\_materialized\_views {#settings-deduplicate-blocks-in-dependent-materialized-views} + +Active ou désactive la vérification de déduplication des vues matérialisées qui reçoivent des données à partir de tables\* répliquées. + +Valeurs possibles: + + 0 — Disabled. + 1 — Enabled. + +Valeur par défaut: 0. + +Utilisation + +Par défaut, la déduplication n'est pas effectuée pour les vues matérialisées mais en amont, dans la table source. +Si un bloc inséré est ignoré en raison de la déduplication dans la table source, il n'y aura pas d'insertion dans les vues matérialisées attachées. Ce comportement existe pour permettre l'insertion de données hautement agrégées dans des vues matérialisées, dans les cas où les blocs insérés sont les mêmes après l'agrégation de vues matérialisées mais dérivés de différentes insertions dans la table source. +Dans le même temps, ce comportement “breaks” `INSERT` idempotence. Si un `INSERT` dans la table principale a été un succès et `INSERT` into a materialized view failed (e.g. because of communication failure with Zookeeper) a client will get an error and can retry the operation. However, the materialized view won't receive the second insert because it will be discarded by deduplication in the main (source) table. The setting `deduplicate_blocks_in_dependent_materialized_views` permet de changer ce comportement. Lors d'une nouvelle tentative, une vue matérialisée recevra l'insertion répétée et effectuera une vérification de déduplication par elle-même, +ignorant le résultat de la vérification pour la table source, et insérera des lignes perdues en raison de la première défaillance. + +## max\_network\_bytes {#settings-max-network-bytes} + +Limite le volume de données (en octets) qui est reçu ou transmis sur le réseau lors de l'exécution d'une requête. Ce paramètre s'applique à chaque individu requête. + +Valeurs possibles: + +- Entier positif. +- 0 — Data volume control is disabled. + +Valeur par défaut: 0. + +## max\_network\_bandwidth {#settings-max-network-bandwidth} + +Limite la vitesse de l'échange de données sur le réseau en octets par seconde. Ce paramètre s'applique à toutes les requêtes. + +Valeurs possibles: + +- Entier positif. +- 0 — Bandwidth control is disabled. + +Valeur par défaut: 0. + +## max\_network\_bandwidth\_for\_user {#settings-max-network-bandwidth-for-user} + +Limite la vitesse de l'échange de données sur le réseau en octets par seconde. Ce paramètre s'applique à toutes les requêtes exécutées simultanément par un seul utilisateur. + +Valeurs possibles: + +- Entier positif. +- 0 — Control of the data speed is disabled. + +Valeur par défaut: 0. + +## max\_network\_bandwidth\_for\_all\_users {#settings-max-network-bandwidth-for-all-users} + +Limite la vitesse à laquelle les données sont échangées sur le réseau en octets par seconde. Ce paramètre s'applique à toutes les requêtes exécutées simultanément sur le serveur. + +Valeurs possibles: + +- Entier positif. +- 0 — Control of the data speed is disabled. + +Valeur par défaut: 0. + +## count\_distinct\_implementation {#settings-count_distinct_implementation} + +Spécifie de l' `uniq*` les fonctions doivent être utilisées pour [COUNT(DISTINCT …)](../../query_language/agg_functions/reference.md#agg_function-count) construction. + +Valeurs possibles: + +- [uniq](../../query_language/agg_functions/reference.md#agg_function-uniq) +- [uniqcombiné](../../query_language/agg_functions/reference.md#agg_function-uniqcombined) +- [uniqCombined64](../../query_language/agg_functions/reference.md#agg_function-uniqcombined64) +- [uniqHLL12](../../query_language/agg_functions/reference.md#agg_function-uniqhll12) +- [uniqExact](../../query_language/agg_functions/reference.md#agg_function-uniqexact) + +Valeur par défaut: `uniqExact`. + +## skip\_unavailable\_shards {#settings-skip_unavailable_shards} + +Active ou désactive le saut silencieux des fragments indisponibles. + +Tesson est considéré comme indisponible si toutes ses répliques ne sont pas disponibles. Une réplique n'est pas disponible dans les cas suivants: + +- ClickHouse ne peut pas se connecter à la réplique pour une raison quelconque. + + Lors de la connexion à une réplique, ClickHouse effectue plusieurs tentatives. Si toutes ces tentatives échouent, la réplique est considéré comme indisponible. + +- La réplique ne peut pas être résolue via le DNS. + + Si le nom d'hôte du réplica ne peut pas être résolu via DNS, il peut indiquer les situations suivantes: + + - L'hôte de la réplique n'a pas d'enregistrement DNS. Il peut se produire dans les systèmes avec DNS dynamique, par exemple, [Kubernetes](https://kubernetes.io), où les nœuds peuvent être insolubles pendant les temps d'arrêt, et ce n'est pas une erreur. + + - Erreur de Configuration. Le fichier de configuration ClickHouse contient un mauvais nom d'hôte. + +Valeurs possibles: + +- 1 — skipping enabled. + + Si un fragment n'est pas disponible, ClickHouse renvoie un résultat basé sur des données partielles et ne signale pas les problèmes de disponibilité des nœuds. + +- 0 — skipping disabled. + + Si un fragment n'est pas disponible, ClickHouse lève une exception. + +Valeur par défaut: 0. + +## optimize\_skip\_unused\_shards {#settings-optimize_skip_unused_shards} + +Active ou désactive le saut des fragments inutilisés pour les requêtes SELECT qui ont la condition de clé de sharding dans PREWHERE/WHERE (suppose que les données sont distribuées par la clé de sharding, sinon ne rien faire). + +Valeur par défaut: 0 + +## force\_optimize\_skip\_unused\_shards {#settings-force_optimize_skip_unused_shards} + +Active ou désactive l'exécution de la requête si [`optimize_skip_unused_shards`](#settings-optimize_skip_unused_shards) activé et sauter des fragments inutilisés n'est pas possible. Si le saut n'est pas possible et le paramètre est activé, une exception sera levée. + +Valeurs possibles: + +- 0 - Désactivé (ne jette) +- 1-Désactiver l'exécution de la requête uniquement si la table a une clé de sharding +- 2-Désactiver l'exécution de la requête quelle que soit la clé de sharding est définie pour la table + +Valeur par défaut: 0 + +## force\_optimize\_skip\_unused\_shards\_no\_nested {#settings-force_optimize_skip_unused_shards_no_nested} + +Réinitialiser [`optimize_skip_unused_shards`](#settings-force_optimize_skip_unused_shards) pour imbriquée `Distributed` table + +Valeurs possibles: + +- 1 — Enabled. +- 0 — Disabled. + +Valeur par défaut: 0. + +## optimize\_throw\_if\_noop {#setting-optimize_throw_if_noop} + +Active ou désactive le lancement d'une exception si [OPTIMIZE](../../query_language/misc.md#misc_operations-optimize) la requête n'a pas effectué de fusion. + +Par défaut, `OPTIMIZE` retourne avec succès même s'il n'a rien fait. Ce paramètre vous permet de différencier ces situations et d'obtenir la raison dans un message d'exception. + +Valeurs possibles: + +- 1 — Throwing an exception is enabled. +- 0 — Throwing an exception is disabled. + +Valeur par défaut: 0. + +## distributed\_replica\_error\_half\_life {#settings-distributed_replica_error_half_life} + +- Type: secondes +- Valeur par défaut: 60 secondes + +Contrôle la vitesse à laquelle les erreurs dans les tables distribuées sont mises à zéro. Si une réplique est indisponible pendant un certain temps, accumule 5 erreurs et distributed\_replica\_error\_half\_life est défini sur 1 seconde, la réplique est considérée comme normale 3 secondes après la dernière erreur. + +Voir aussi: + +- [Tableau moteur Distribués](../../operations/table_engines/distributed.md) +- [distributed\_replica\_error\_cap](#settings-distributed_replica_error_cap) + +## distributed\_replica\_error\_cap {#settings-distributed_replica_error_cap} + +- Type: unsigned int +- Valeur par défaut: 1000 + +Le nombre d'erreurs de chaque réplique est plafonné à cette valeur, empêchant une seule réplique d'accumuler trop d'erreurs. + +Voir aussi: + +- [Tableau moteur Distribués](../../operations/table_engines/distributed.md) +- [distributed\_replica\_error\_half\_life](#settings-distributed_replica_error_half_life) + +## distributed\_directory\_monitor\_sleep\_time\_ms {#distributed_directory_monitor_sleep_time_ms} + +Intervalle de Base pour le [Distribué](../table_engines/distributed.md) tableau moteur à envoyer des données. L'intervalle réel augmente de façon exponentielle en cas d'erreurs. + +Valeurs possibles: + +- Un nombre entier positif de millisecondes. + +Valeur par défaut: 100 millisecondes. + +## distributed\_directory\_monitor\_max\_sleep\_time\_ms {#distributed_directory_monitor_max_sleep_time_ms} + +Intervalle maximal pour le [Distribué](../table_engines/distributed.md) tableau moteur à envoyer des données. Limite la croissance exponentielle de l'intervalle défini dans [distributed\_directory\_monitor\_sleep\_time\_ms](#distributed_directory_monitor_sleep_time_ms) paramètre. + +Valeurs possibles: + +- Un nombre entier positif de millisecondes. + +Valeur par défaut: 30000 millisecondes (30 secondes). + +## distributed\_directory\_monitor\_batch\_inserts {#distributed_directory_monitor_batch_inserts} + +Active / désactive l'envoi des données insérées par lots. + +Lorsque l'envoi par lots est activé, le [Distribué](../table_engines/distributed.md) tableau moteur essaie d'envoyer plusieurs fichiers de données insérées dans une seule opération au lieu de les envoyer séparément. L'envoi par lots améliore les performances du cluster en utilisant mieux les ressources du serveur et du réseau. + +Valeurs possibles: + +- 1 — Enabled. +- 0 — Disabled. + +Valeur par défaut: 0. + +## os\_thread\_priority {#setting-os-thread-priority} + +Définit la priorité ([beau](https://en.wikipedia.org/wiki/Nice_(Unix))) pour les threads qui exécutent des requêtes. Le planificateur du système d'exploitation considère cette priorité lors du choix du prochain thread à exécuter sur chaque noyau CPU disponible. + +!!! warning "Avertissement" + Pour utiliser ce paramètre, vous devez définir l' `CAP_SYS_NICE` capacité. Le `clickhouse-server` paquet configure lors de l'installation. Certains environnements virtuels ne vous permettent pas de définir `CAP_SYS_NICE` capacité. Dans ce cas, `clickhouse-server` affiche un message à ce sujet au début. + +Valeurs possibles: + +- Vous pouvez définir des valeurs dans la gamme `[-20, 19]`. + +Des valeurs plus faibles signifient une priorité plus élevée. Les discussions avec des bas `nice` les valeurs de priorité sont effectués plus fréquemment que les discussions avec des valeurs élevées. Les valeurs élevées sont préférables pour les requêtes non interactives de longue durée, car elles leur permettent d'abandonner rapidement des ressources au profit de requêtes interactives courtes lorsqu'elles arrivent. + +Valeur par défaut: 0. + +## query\_profiler\_real\_time\_period\_ns {#query_profiler_real_time_period_ns} + +Définit la période pour une horloge réelle de la [requête profiler](../../operations/performance/sampling_query_profiler.md). La vraie minuterie d'horloge compte le temps d'horloge murale. + +Valeurs possibles: + +- Nombre entier positif, en nanosecondes. + + Valeurs recommandées: + + - 10000000 (100 times a second) nanoseconds and less for single queries. + - 1000000000 (once a second) for cluster-wide profiling. + +- 0 pour éteindre la minuterie. + +Type: [UInt64](../../data_types/int_uint.md). + +Valeur par défaut: 1000000000 nanosecondes (une fois par seconde). + +Voir aussi: + +- Système de table [trace\_log](../system_tables.md#system_tables-trace_log) + +## query\_profiler\_cpu\_time\_period\_ns {#query_profiler_cpu_time_period_ns} + +Définit la période pour une minuterie D'horloge CPU du [requête profiler](../../operations/performance/sampling_query_profiler.md). Cette minuterie ne compte que le temps CPU. + +Valeurs possibles: + +- Un nombre entier positif de nanosecondes. + + Valeurs recommandées: + + - 10000000 (100 times a second) nanoseconds and more for single queries. + - 1000000000 (once a second) for cluster-wide profiling. + +- 0 pour éteindre la minuterie. + +Type: [UInt64](../../data_types/int_uint.md). + +Valeur par défaut: 1000000000 nanosecondes. + +Voir aussi: + +- Système de table [trace\_log](../system_tables.md#system_tables-trace_log) + +## allow\_introspection\_functions {#settings-allow_introspection_functions} + +Active des désactive [obscures fonctions](../../query_language/functions/introspection.md) pour le profilage de requête. + +Valeurs possibles: + +- 1 — Introspection functions enabled. +- 0 — Introspection functions disabled. + +Valeur par défaut: 0. + +**Voir Aussi** + +- [Échantillonnage Du Profileur De Requête](../performance/sampling_query_profiler.md) +- Système de table [trace\_log](../system_tables.md#system_tables-trace_log) + +## input\_format\_parallel\_parsing {#input-format-parallel-parsing} + +- Type: bool +- Valeur par défaut: True + +Activer l'analyse parallèle des formats de données en préservant l'ordre. Pris en charge uniquement pour les formats TSV, TKSV, CSV et jsoneachrow. + +## min\_chunk\_bytes\_for\_parallel\_parsing {#min-chunk-bytes-for-parallel-parsing} + +- Type: unsigned int +- Valeur par défaut: 1 MiB + +La taille minimale du bloc en octets, que chaque thread analysera en parallèle. + +## output\_format\_avro\_codec {#settings-output_format_avro_codec} + +Définit le codec de compression utilisé pour le fichier Avro de sortie. + +Type: string + +Valeurs possibles: + +- `null` — No compression +- `deflate` — Compress with Deflate (zlib) +- `snappy` — Compress with [Hargneux](https://google.github.io/snappy/) + +Valeur par défaut: `snappy` (si disponible) ou `deflate`. + +## output\_format\_avro\_sync\_interval {#settings-output_format_avro_sync_interval} + +Définit la taille minimale des données (en octets) entre les marqueurs de synchronisation pour le fichier Avro de sortie. + +Type: unsigned int + +Valeurs possibles: 32 (32 octets) - 1073741824 (1 GiB) + +Valeur par défaut: 32768 (32 Ko) + +## format\_avro\_schema\_registry\_url {#settings-format_avro_schema_registry_url} + +Définit L'URL de Registre de schéma Confluent à utiliser avec [AvroConfluent](../../interfaces/formats.md#data-format-avro-confluent) format + +Type: URL + +Valeur par défaut: vide + +[Article Original](https://clickhouse.tech/docs/en/operations/settings/settings/) diff --git a/docs/fr/operations/settings/settings_profiles.md b/docs/fr/operations/settings/settings_profiles.md new file mode 100644 index 00000000000..23b36d698cb --- /dev/null +++ b/docs/fr/operations/settings/settings_profiles.md @@ -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 + + + + + + 8 + + + + + 1000000000 + 100000000000 + + 1000000 + any + + 1000000 + 1000000000 + + 100000 + 100000000 + break + + 600 + 1000000 + 15 + + 25 + 100 + 50 + + 2 + 25 + 50 + 100 + + 1 + + +``` + +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/) diff --git a/docs/fr/operations/settings/settings_users.md b/docs/fr/operations/settings/settings_users.md new file mode 100644 index 00000000000..13134f1a2fd --- /dev/null +++ b/docs/fr/operations/settings/settings_users.md @@ -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 + + + + + + + + + + + profile_name + + default + + + + + expression + + + + + + +``` + +### 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, `qwerty`. Le mot de passe peut être laissé en blanc. + + + +- Pour attribuer un mot de passe à l'aide de son hachage SHA256, placez-le dans un `password_sha256_hex` élément. + + Exemple, `65e84be33532fb784c48129675f9eff3a682b27168c0ea744b2cf58ee02337c5`. + + 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. + + + +- 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, `08b4a0f1de6ad37da17359e592c8d74788a83eb0`. + + 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 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::`. + +- `` — 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. + +- `` — 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 +::/0 +``` + +!!! 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 +::1 +127.0.0.1 +``` + +### 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 + + + + + id = 1000 + + + + +``` + +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/) diff --git a/docs/fr/operations/system_tables.md b/docs/fr/operations/system_tables.md new file mode 100644 index 00000000000..469a0c710bd --- /dev/null +++ b/docs/fr/operations/system_tables.md @@ -0,0 +1,1051 @@ +--- +machine_translated: true +--- + +# Les tables système {#system-tables} + +Les tables système sont utilisées pour implémenter une partie des fonctionnalités du système et pour fournir un accès à des informations sur le fonctionnement du système. +Vous ne pouvez pas supprimer une table système (mais vous pouvez effectuer un détachement). +Les tables système n'ont pas de fichiers avec des données sur le disque ou de fichiers avec des métadonnées. Le serveur crée toutes les tables système au démarrage. +Les tables système sont en lecture seule. +Ils sont situés dans la ‘system’ la base de données. + +## système.asynchronous\_metrics {#system_tables-asynchronous_metrics} + +Contient des mesures qui sont calculées périodiquement en arrière-plan. Par exemple, la quantité de RAM utilisée. + +Colonne: + +- `metric` ([Chaîne](../data_types/string.md)) — Metric name. +- `value` ([Float64](../data_types/float.md)) — Metric value. + +**Exemple** + +``` sql +SELECT * FROM system.asynchronous_metrics LIMIT 10 +``` + +``` text +┌─metric──────────────────────────────────┬──────value─┐ +│ jemalloc.background_thread.run_interval │ 0 │ +│ jemalloc.background_thread.num_runs │ 0 │ +│ jemalloc.background_thread.num_threads │ 0 │ +│ jemalloc.retained │ 422551552 │ +│ jemalloc.mapped │ 1682989056 │ +│ jemalloc.resident │ 1656446976 │ +│ jemalloc.metadata_thp │ 0 │ +│ jemalloc.metadata │ 10226856 │ +│ UncompressedCacheCells │ 0 │ +│ MarkCacheFiles │ 0 │ +└─────────────────────────────────────────┴────────────┘ +``` + +**Voir Aussi** + +- [Surveiller](monitoring.md) — Base concepts of ClickHouse monitoring. +- [système.métrique](#system_tables-metrics) — Contains instantly calculated metrics. +- [système.événement](#system_tables-events) — Contains a number of events that have occurred. +- [système.metric\_log](#system_tables-metric_log) — Contains a history of metrics values from tables `system.metrics` и `system.events`. + +## système.cluster {#system-clusters} + +Contient des informations sur les clusters disponibles dans le fichier de configuration et les serveurs en eux. + +Colonne: + +- `cluster` (String) — The cluster name. +- `shard_num` (UInt32) — The shard number in the cluster, starting from 1. +- `shard_weight` (UInt32) — The relative weight of the shard when writing data. +- `replica_num` (UInt32) — The replica number in the shard, starting from 1. +- `host_name` (String) — The host name, as specified in the config. +- `host_address` (String) — The host IP address obtained from DNS. +- `port` (UInt16) — The port to use for connecting to the server. +- `user` (String) — The name of the user for connecting to the server. +- `errors_count` (UInt32) - nombre de fois que cet hôte n'a pas atteint le réplica. +- `estimated_recovery_time` (UInt32) - secondes restantes jusqu'à ce que le nombre d'erreurs de réplique soit remis à zéro et qu'il soit considéré comme revenu à la normale. + +Veuillez noter que `errors_count` est mise à jour une fois par requête à la grappe, mais `estimated_recovery_time` est recalculé sur-demande. Il pourrait donc y avoir un cas de non-zéro `errors_count` et zéro `estimated_recovery_time`, cette requête suivante sera nulle `errors_count` et essayez d'utiliser des répliques comme si elle ne comporte pas d'erreurs. + +**Voir aussi** + +- [Tableau moteur Distribués](table_engines/distributed.md) +- [paramètre distributed\_replica\_error\_cap](settings/settings.md#settings-distributed_replica_error_cap) +- [paramètre distributed\_replica\_error\_half\_life](settings/settings.md#settings-distributed_replica_error_half_life) + +## système.colonne {#system-columns} + +Contient des informations sur les colonnes de toutes les tables. + +Vous pouvez utiliser ce tableau pour obtenir des informations similaires à l' [DESCRIBE TABLE](../query_language/misc.md#misc-describe-table) requête, mais pour plusieurs tables à la fois. + +Le `system.columns` le tableau contient les colonnes suivantes (la colonne type est indiqué entre parenthèses): + +- `database` (String) — Database name. +- `table` (String) — Table name. +- `name` (String) — Column name. +- `type` (String) — Column type. +- `default_kind` (String) — Expression type (`DEFAULT`, `MATERIALIZED`, `ALIAS`) pour la valeur par défaut, ou une chaîne vide si elle n'est pas définie. +- `default_expression` (String) — Expression for the default value, or an empty string if it is not defined. +- `data_compressed_bytes` (UInt64) — The size of compressed data, in bytes. +- `data_uncompressed_bytes` (UInt64) — The size of decompressed data, in bytes. +- `marks_bytes` (UInt64) — The size of marks, in bytes. +- `comment` (String) — Comment on the column, or an empty string if it is not defined. +- `is_in_partition_key` (UInt8) — Flag that indicates whether the column is in the partition expression. +- `is_in_sorting_key` (UInt8) — Flag that indicates whether the column is in the sorting key expression. +- `is_in_primary_key` (UInt8) — Flag that indicates whether the column is in the primary key expression. +- `is_in_sampling_key` (UInt8) — Flag that indicates whether the column is in the sampling key expression. + +## système.contributeur {#system-contributors} + +Contient des informations sur les donateurs. Tous les constributors dans un ordre aléatoire. L'ordre est aléatoire au moment de l'exécution de la requête. + +Colonne: + +- `name` (String) — Contributor (author) name from git log. + +**Exemple** + +``` sql +SELECT * FROM system.contributors LIMIT 10 +``` + +``` text +┌─name─────────────┐ +│ Olga Khvostikova │ +│ Max Vetrov │ +│ LiuYangkuan │ +│ svladykin │ +│ zamulla │ +│ Šimon Podlipský │ +│ BayoNet │ +│ Ilya Khomutov │ +│ Amy Krishnevsky │ +│ Loud_Scream │ +└──────────────────┘ +``` + +Trouver vous-même dans le tableau, utilisez une requête: + +``` sql +SELECT * FROM system.contributors WHERE name='Olga Khvostikova' +``` + +``` text +┌─name─────────────┐ +│ Olga Khvostikova │ +└──────────────────┘ +``` + +## système.les bases de données {#system-databases} + +Cette table contient une seule colonne de chaîne appelée ‘name’ – the name of a database. +Chaque base de données que le serveur connaît a une entrée correspondante dans la table. +Cette table système est utilisée pour implémenter `SHOW DATABASES` requête. + +## système.detached\_parts {#system_tables-detached_parts} + +Contient des informations sur les pièces détachées de [MergeTree](table_engines/mergetree.md) table. Le `reason` colonne spécifie pourquoi la pièce a été détachée. Pour les pièces détachées par l'utilisateur, la raison est vide. De telles pièces peuvent être attachées avec [ALTER TABLE ATTACH PARTITION\|PART](../query_language/query_language/alter/#alter_attach-partition) commande. Pour la description des autres colonnes, voir [système.partie](#system_tables-parts). Si le nom de pièce n'est pas valide, les valeurs de certaines colonnes peuvent être `NULL`. Ces pièces peuvent être supprimés avec [ALTER TABLE DROP DETACHED PART](../query_language/query_language/alter/#alter_drop-detached). + +## système.dictionnaire {#system-dictionaries} + +Contient des informations sur les dictionnaires externes. + +Colonne: + +- `name` (String) — Dictionary name. +- `type` (String) — Dictionary type: Flat, Hashed, Cache. +- `origin` (String) — Path to the configuration file that describes the dictionary. +- `attribute.names` (Array(String)) — Array of attribute names provided by the dictionary. +- `attribute.types` (Array(String)) — Corresponding array of attribute types that are provided by the dictionary. +- `has_hierarchy` (UInt8) — Whether the dictionary is hierarchical. +- `bytes_allocated` (UInt64) — The amount of RAM the dictionary uses. +- `hit_rate` (Float64) — For cache dictionaries, the percentage of uses for which the value was in the cache. +- `element_count` (UInt64) — The number of items stored in the dictionary. +- `load_factor` (Float64) — The percentage filled in the dictionary (for a hashed dictionary, the percentage filled in the hash table). +- `creation_time` (DateTime) — The time when the dictionary was created or last successfully reloaded. +- `last_exception` (String) — Text of the error that occurs when creating or reloading the dictionary if the dictionary couldn't be created. +- `source` (String) — Text describing the data source for the dictionary. + +Notez que la quantité de mémoire utilisée par le dictionnaire n'est pas proportionnel au nombre d'articles qui s'y trouvent. Ainsi, pour les dictionnaires plats et mis en cache, toutes les cellules de mémoire sont pré-assignées, quelle que soit la capacité du dictionnaire. + +## système.événement {#system_tables-events} + +Contient des informations sur le nombre d'événements survenus dans le système. Par exemple, dans le tableau, vous pouvez trouver combien `SELECT` les requêtes ont été traitées depuis le démarrage du serveur ClickHouse. + +Colonne: + +- `event` ([Chaîne](../data_types/string.md)) — Event name. +- `value` ([UInt64](../data_types/int_uint.md)) — Number of events occurred. +- `description` ([Chaîne](../data_types/string.md)) — Event description. + +**Exemple** + +``` sql +SELECT * FROM system.events LIMIT 5 +``` + +``` text +┌─event─────────────────────────────────┬─value─┬─description────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ Query │ 12 │ Number of queries to be interpreted and potentially executed. Does not include queries that failed to parse or were rejected due to AST size limits, quota limits or limits on the number of simultaneously running queries. May include internal queries initiated by ClickHouse itself. Does not count subqueries. │ +│ SelectQuery │ 8 │ Same as Query, but only for SELECT queries. │ +│ FileOpen │ 73 │ Number of files opened. │ +│ ReadBufferFromFileDescriptorRead │ 155 │ Number of reads (read/pread) from a file descriptor. Does not include sockets. │ +│ ReadBufferFromFileDescriptorReadBytes │ 9931 │ Number of bytes read from file descriptors. If the file is compressed, this will show the compressed data size. │ +└───────────────────────────────────────┴───────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +``` + +**Voir Aussi** + +- [système.asynchronous\_metrics](#system_tables-asynchronous_metrics) — Contains periodically calculated metrics. +- [système.métrique](#system_tables-metrics) — Contains instantly calculated metrics. +- [système.metric\_log](#system_tables-metric_log) — Contains a history of metrics values from tables `system.metrics` и `system.events`. +- [Surveiller](monitoring.md) — Base concepts of ClickHouse monitoring. + +## système.fonction {#system-functions} + +Contient des informations sur les fonctions normales et agrégées. + +Colonne: + +- `name`(`String`) – The name of the function. +- `is_aggregate`(`UInt8`) — Whether the function is aggregate. + +## système.graphite\_retentions {#system-graphite-retentions} + +Contient des informations sur les paramètres [graphite\_rollup](server_settings/settings.md#server_settings-graphite_rollup) qui sont utilisés dans les tableaux avec [\* GraphiteMergeTree](table_engines/graphitemergetree.md) moteur. + +Colonne: + +- `config_name` (Chaîne) - `graphite_rollup` nom du paramètre. +- `regexp` (Chaîne) - un modèle pour le nom de la métrique. +- `function` (Chaîne) - le nom de la fonction d'agrégation. +- `age` (UInt64) - l'âge minimum des données en secondes. +- `precision` (UInt64) - comment définir précisément l'âge des données en secondes. +- `priority` (UInt16) - priorité de motif. +- `is_default` (UInt8) - indique si le motif est la valeur par défaut. +- `Tables.database` (Array (String)) - tableau de noms de tables de base de données qui utilisent `config_name` paramètre. +- `Tables.table` (Array (String)) - tableau de noms de tables qui utilisent `config_name` paramètre. + +## système.fusionner {#system-merges} + +Contient des informations sur les fusions et les mutations de pièces actuellement en cours pour les tables de la famille MergeTree. + +Colonne: + +- `database` (String) — The name of the database the table is in. +- `table` (String) — Table name. +- `elapsed` (Float64) — The time elapsed (in seconds) since the merge started. +- `progress` (Float64) — The percentage of completed work from 0 to 1. +- `num_parts` (UInt64) — The number of pieces to be merged. +- `result_part_name` (String) — The name of the part that will be formed as the result of merging. +- `is_mutation` (UInt8) - 1 si ce processus est une mutation partielle. +- `total_size_bytes_compressed` (UInt64) — The total size of the compressed data in the merged chunks. +- `total_size_marks` (UInt64) — The total number of marks in the merged parts. +- `bytes_read_uncompressed` (UInt64) — Number of bytes read, uncompressed. +- `rows_read` (UInt64) — Number of rows read. +- `bytes_written_uncompressed` (UInt64) — Number of bytes written, uncompressed. +- `rows_written` (UInt64) — Number of rows written. + +## système.métrique {#system_tables-metrics} + +Contient des mesures qui peuvent être calculées instantanément, ou ont une valeur actuelle. Par exemple, le nombre de requêtes traitées ou en cours réplique de retard. Ce tableau est toujours à jour. + +Colonne: + +- `metric` ([Chaîne](../data_types/string.md)) — Metric name. +- `value` ([Int64](../data_types/int_uint.md)) — Metric value. +- `description` ([Chaîne](../data_types/string.md)) — Metric description. + +La liste des mesures que vous pouvez trouver dans le [SGBD / src / Common / CurrentMetrics.rpc](https://github.com/ClickHouse/ClickHouse/blob/master/dbms/src/Common/CurrentMetrics.cpp) fichier source de ClickHouse. + +**Exemple** + +``` sql +SELECT * FROM system.metrics LIMIT 10 +``` + +``` text +┌─metric─────────────────────┬─value─┬─description──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ Query │ 1 │ Number of executing queries │ +│ Merge │ 0 │ Number of executing background merges │ +│ PartMutation │ 0 │ Number of mutations (ALTER DELETE/UPDATE) │ +│ ReplicatedFetch │ 0 │ Number of data parts being fetched from replicas │ +│ ReplicatedSend │ 0 │ Number of data parts being sent to replicas │ +│ ReplicatedChecks │ 0 │ Number of data parts checking for consistency │ +│ BackgroundPoolTask │ 0 │ Number of active tasks in BackgroundProcessingPool (merges, mutations, fetches, or replication queue bookkeeping) │ +│ BackgroundSchedulePoolTask │ 0 │ Number of active tasks in BackgroundSchedulePool. This pool is used for periodic ReplicatedMergeTree tasks, like cleaning old data parts, altering data parts, replica re-initialization, etc. │ +│ DiskSpaceReservedForMerge │ 0 │ Disk space reserved for currently running background merges. It is slightly more than the total size of currently merging parts. │ +│ DistributedSend │ 0 │ Number of connections to remote servers sending data that was INSERTed into Distributed tables. Both synchronous and asynchronous mode. │ +└────────────────────────────┴───────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +``` + +**Voir Aussi** + +- [système.asynchronous\_metrics](#system_tables-asynchronous_metrics) — Contains periodically calculated metrics. +- [système.événement](#system_tables-events) — Contains a number of events that occurred. +- [système.metric\_log](#system_tables-metric_log) — Contains a history of metrics values from tables `system.metrics` и `system.events`. +- [Surveiller](monitoring.md) — Base concepts of ClickHouse monitoring. + +## système.metric\_log {#system_tables-metric_log} + +Contient l'historique des valeurs de métriques des tables `system.metrics` et `system.events` périodiquement vidé sur le disque. +Pour activer la collection d'historique des métriques `system.metric_log`, créer `/etc/clickhouse-server/config.d/metric_log.xml` avec le contenu suivant: + +``` xml + + + system + metric_log
+ 7500 + 1000 +
+
+``` + +**Exemple** + +``` sql +SELECT * FROM system.metric_log LIMIT 1 FORMAT Vertical; +``` + +``` text +Row 1: +────── +event_date: 2020-02-18 +event_time: 2020-02-18 07:15:33 +milliseconds: 554 +ProfileEvent_Query: 0 +ProfileEvent_SelectQuery: 0 +ProfileEvent_InsertQuery: 0 +ProfileEvent_FileOpen: 0 +ProfileEvent_Seek: 0 +ProfileEvent_ReadBufferFromFileDescriptorRead: 1 +ProfileEvent_ReadBufferFromFileDescriptorReadFailed: 0 +ProfileEvent_ReadBufferFromFileDescriptorReadBytes: 0 +ProfileEvent_WriteBufferFromFileDescriptorWrite: 1 +ProfileEvent_WriteBufferFromFileDescriptorWriteFailed: 0 +ProfileEvent_WriteBufferFromFileDescriptorWriteBytes: 56 +... +CurrentMetric_Query: 0 +CurrentMetric_Merge: 0 +CurrentMetric_PartMutation: 0 +CurrentMetric_ReplicatedFetch: 0 +CurrentMetric_ReplicatedSend: 0 +CurrentMetric_ReplicatedChecks: 0 +... +``` + +**Voir aussi** + +- [système.asynchronous\_metrics](#system_tables-asynchronous_metrics) — Contains periodically calculated metrics. +- [système.événement](#system_tables-events) — Contains a number of events that occurred. +- [système.métrique](#system_tables-metrics) — Contains instantly calculated metrics. +- [Surveiller](monitoring.md) — Base concepts of ClickHouse monitoring. + +## système.nombre {#system-numbers} + +Cette table contient une seule colonne UInt64 nommée ‘number’ qui contient presque tous les nombres naturels à partir de zéro. +Vous pouvez utiliser cette table pour les tests, ou si vous avez besoin de faire une recherche de force brute. +Les lectures de cette table ne sont pas parallélisées. + +## système.numbers\_mt {#system-numbers-mt} + +Le même que ‘system.numbers’ mais les lectures sont parallélisées. Les nombres peuvent être retournés dans n'importe quel ordre. +Utilisé pour les tests. + +## système.un {#system-one} + +Cette table contient une seule ligne avec un ‘dummy’ Colonne UInt8 contenant la valeur 0. +Cette table est utilisée si une requête SELECT ne spécifie pas la clause FROM. +Ceci est similaire à la table double trouvée dans d'autres SGBD. + +## système.partie {#system_tables-parts} + +Contient des informations sur les parties de [MergeTree](table_engines/mergetree.md) table. + +Chaque ligne décrit une partie des données. + +Colonne: + +- `partition` (String) – The partition name. To learn what a partition is, see the description of the [ALTER](../query_language/alter.md#query_language_queries_alter) requête. + + Format: + + - `YYYYMM` pour le partitionnement automatique par mois. + - `any_string` lors du partitionnement manuel. + +- `name` (`String`) – Name of the data part. + +- `active` (`UInt8`) – Flag that indicates whether the data part is active. If a data part is active, it's used in a table. Otherwise, it's deleted. Inactive data parts remain after merging. + +- `marks` (`UInt64`) – The number of marks. To get the approximate number of rows in a data part, multiply `marks` par la granularité d'index (généralement 8192) (cet indice ne fonctionne pas pour la granularité adaptative). + +- `rows` (`UInt64`) – The number of rows. + +- `bytes_on_disk` (`UInt64`) – Total size of all the data part files in bytes. + +- `data_compressed_bytes` (`UInt64`) – Total size of compressed data in the data part. All the auxiliary files (for example, files with marks) are not included. + +- `data_uncompressed_bytes` (`UInt64`) – Total size of uncompressed data in the data part. All the auxiliary files (for example, files with marks) are not included. + +- `marks_bytes` (`UInt64`) – The size of the file with marks. + +- `modification_time` (`DateTime`) – The time the directory with the data part was modified. This usually corresponds to the time of data part creation.\| + +- `remove_time` (`DateTime`) – The time when the data part became inactive. + +- `refcount` (`UInt32`) – The number of places where the data part is used. A value greater than 2 indicates that the data part is used in queries or merges. + +- `min_date` (`Date`) – The minimum value of the date key in the data part. + +- `max_date` (`Date`) – The maximum value of the date key in the data part. + +- `min_time` (`DateTime`) – The minimum value of the date and time key in the data part. + +- `max_time`(`DateTime`) – The maximum value of the date and time key in the data part. + +- `partition_id` (`String`) – ID of the partition. + +- `min_block_number` (`UInt64`) – The minimum number of data parts that make up the current part after merging. + +- `max_block_number` (`UInt64`) – The maximum number of data parts that make up the current part after merging. + +- `level` (`UInt32`) – Depth of the merge tree. Zero means that the current part was created by insert rather than by merging other parts. + +- `data_version` (`UInt64`) – Number that is used to determine which mutations should be applied to the data part (mutations with a version higher than `data_version`). + +- `primary_key_bytes_in_memory` (`UInt64`) – The amount of memory (in bytes) used by primary key values. + +- `primary_key_bytes_in_memory_allocated` (`UInt64`) – The amount of memory (in bytes) reserved for primary key values. + +- `is_frozen` (`UInt8`) – Flag that shows that a partition data backup exists. 1, the backup exists. 0, the backup doesn't exist. For more details, see [FREEZE PARTITION](../query_language/alter.md#alter_freeze-partition) + +- `database` (`String`) – Name of the database. + +- `table` (`String`) – Name of the table. + +- `engine` (`String`) – Name of the table engine without parameters. + +- `path` (`String`) – Absolute path to the folder with data part files. + +- `disk` (`String`) – Name of a disk that stores the data part. + +- `hash_of_all_files` (`String`) – [sipHash128](../query_language/functions/hash_functions.md#hash_functions-siphash128) de fichiers compressés. + +- `hash_of_uncompressed_files` (`String`) – [sipHash128](../query_language/functions/hash_functions.md#hash_functions-siphash128) de fichiers non compressés (fichiers avec des marques, fichier d'index, etc.). + +- `uncompressed_hash_of_compressed_files` (`String`) – [sipHash128](../query_language/functions/hash_functions.md#hash_functions-siphash128) des données dans les fichiers compressés comme s'ils étaient non compressé. + +- `bytes` (`UInt64`) – Alias for `bytes_on_disk`. + +- `marks_size` (`UInt64`) – Alias for `marks_bytes`. + +## système.part\_log {#system_tables-part-log} + +Le `system.part_log` la table est créée uniquement si [part\_log](server_settings/settings.md#server_settings-part-log) serveur paramètre est spécifié. + +Ce tableau contient des informations sur les événements survenus avec [les parties de données](table_engines/custom_partitioning_key.md) dans le [MergeTree](table_engines/mergetree.md) table de famille, telles que l'ajout ou la fusion de données. + +Le `system.part_log` le tableau contient les colonnes suivantes: + +- `event_type` (Enum) — Type of the event that occurred with the data part. Can have one of the following values: + - `NEW_PART` — Inserting of a new data part. + - `MERGE_PARTS` — Merging of data parts. + - `DOWNLOAD_PART` — Downloading a data part. + - `REMOVE_PART` — Removing or detaching a data part using [DETACH PARTITION](../query_language/alter.md#alter_detach-partition). + - `MUTATE_PART` — Mutating of a data part. + - `MOVE_PART` — Moving the data part from the one disk to another one. +- `event_date` (Date) — Event date. +- `event_time` (DateTime) — Event time. +- `duration_ms` (UInt64) — Duration. +- `database` (String) — Name of the database the data part is in. +- `table` (String) — Name of the table the data part is in. +- `part_name` (String) — Name of the data part. +- `partition_id` (String) — ID of the partition that the data part was inserted to. The column takes the ‘all’ si le partitionnement est par `tuple()`. +- `rows` (UInt64) — The number of rows in the data part. +- `size_in_bytes` (UInt64) — Size of the data part in bytes. +- `merged_from` (Array(String)) — An array of names of the parts which the current part was made up from (after the merge). +- `bytes_uncompressed` (UInt64) — Size of uncompressed bytes. +- `read_rows` (UInt64) — The number of rows was read during the merge. +- `read_bytes` (UInt64) — The number of bytes was read during the merge. +- `error` (UInt16) — The code number of the occurred error. +- `exception` (String) — Text message of the occurred error. + +Le `system.part_log` la table est créée après la première insertion de données `MergeTree` table. + +## système.processus {#system_tables-processes} + +Cette table système est utilisée pour implémenter `SHOW PROCESSLIST` requête. + +Colonne: + +- `user` (String) – The user who made the query. Keep in mind that for distributed processing, queries are sent to remote servers under the `default` utilisateur. Le champ contient le nom d'utilisateur pour une requête spécifique, pas pour une requête que cette requête lancée. +- `address` (String) – The IP address the request was made from. The same for distributed processing. To track where a distributed query was originally made from, look at `system.processes` sur le serveur du demandeur de requête. +- `elapsed` (Float64) – The time in seconds since request execution started. +- `rows_read` (UInt64) – The number of rows read from the table. For distributed processing, on the requestor server, this is the total for all remote servers. +- `bytes_read` (UInt64) – The number of uncompressed bytes read from the table. For distributed processing, on the requestor server, this is the total for all remote servers. +- `total_rows_approx` (UInt64) – The approximation of the total number of rows that should be read. For distributed processing, on the requestor server, this is the total for all remote servers. It can be updated during request processing, when new sources to process become known. +- `memory_usage` (UInt64) – Amount of RAM the request uses. It might not include some types of dedicated memory. See the [max\_memory\_usage](../operations/settings/query_complexity.md#settings_max_memory_usage) paramètre. +- `query` (String) – The query text. For `INSERT` il n'inclut pas les données à insérer. +- `query_id` (String) – Query ID, if defined. + +## système.text\_log {#system-tables-text-log} + +Contient des entrées de journalisation. Niveau de journalisation qui va à cette table peut être limité `text_log.level` paramètre de serveur. + +Colonne: + +- `event_date` (`Date`) - Date de l'entrée. +- `event_time` (`DateTime`) - Temps de l'entrée. +- `microseconds` (`UInt32`) - Microsecondes de l'entrée. +- `thread_name` (String) — Name of the thread from which the logging was done. +- `thread_id` (UInt64) — OS thread ID. +- `level` (`Enum8`) - Niveau d'entrée. + - `'Fatal' = 1` + - `'Critical' = 2` + - `'Error' = 3` + - `'Warning' = 4` + - `'Notice' = 5` + - `'Information' = 6` + - `'Debug' = 7` + - `'Trace' = 8` +- `query_id` (`String`)- ID de la requête. +- `logger_name` (`LowCardinality(String)`) - Name of the logger (i.e. `DDLWorker`) +- `message` (`String`) - Le message lui-même. +- `revision` (`UInt32`)- Révision ClickHouse. +- `source_file` (`LowCardinality(String)`)- Fichier Source à partir duquel la journalisation a été effectuée. +- `source_line` (`UInt64`)- Ligne Source à partir de laquelle la journalisation a été effectuée. + +## système.query\_log {#system_tables-query_log} + +Contient des informations sur l'exécution de requêtes. Pour chaque requête, vous pouvez voir l'Heure de début du traitement, la durée du traitement, les messages d'erreur et d'autres informations. + +!!! note "Note" + Le tableau ne contient pas les données d'entrée pour `INSERT` requête. + +Clickhouse crée cette table uniquement si [query\_log](server_settings/settings.md#server_settings-query-log) serveur paramètre est spécifié. Ce paramètre définit les règles de journalisation, tels que l'intervalle d'enregistrement ou le nom de la table, la requête sera connecté. + +Pour activer la journalisation des requêtes, définissez [log\_queries](settings/settings.md#settings-log-queries) paramètre 1. Pour plus de détails, voir le [Paramètre](settings/settings.md) section. + +Le `system.query_log` table enregistre deux types de requêtes: + +1. Requêtes initiales qui ont été exécutées directement par le client. +2. Requêtes enfants initiées par d'autres requêtes (pour l'exécution de requêtes distribuées). Pour ces types de requêtes, des informations sur les requêtes parentes sont affichées dans `initial_*` colonne. + +Colonne: + +- `type` (`Enum8`) — Type of event that occurred when executing the query. Values: + - `'QueryStart' = 1` — Successful start of query execution. + - `'QueryFinish' = 2` — Successful end of query execution. + - `'ExceptionBeforeStart' = 3` — Exception before the start of query execution. + - `'ExceptionWhileProcessing' = 4` — Exception during the query execution. +- `event_date` (Date) — Query starting date. +- `event_time` (DateTime) — Query starting time. +- `query_start_time` (DateTime) — Start time of query execution. +- `query_duration_ms` (UInt64) — Duration of query execution. +- `read_rows` (UInt64) — Number of read rows. +- `read_bytes` (UInt64) — Number of read bytes. +- `written_rows` (UInt64) — For `INSERT` des requêtes, le nombre de lignes. Pour les autres requêtes, la valeur de la colonne est 0. +- `written_bytes` (UInt64) — For `INSERT` des requêtes, le nombre d'octets écrits. Pour les autres requêtes, la valeur de la colonne est 0. +- `result_rows` (UInt64) — Number of rows in the result. +- `result_bytes` (UInt64) — Number of bytes in the result. +- `memory_usage` (UInt64) — Memory consumption by the query. +- `query` (String) — Query string. +- `exception` (String) — Exception message. +- `stack_trace` (String) — Stack trace (a list of methods called before the error occurred). An empty string, if the query is completed successfully. +- `is_initial_query` (UInt8) — Query type. Possible values: + - 1 — Query was initiated by the client. + - 0 — Query was initiated by another query for distributed query execution. +- `user` (String) — Name of the user who initiated the current query. +- `query_id` (String) — ID of the query. +- `address` (IPv6) — IP address that was used to make the query. +- `port` (UInt16) — The client port that was used to make the query. +- `initial_user` (String) — Name of the user who ran the initial query (for distributed query execution). +- `initial_query_id` (String) — ID of the initial query (for distributed query execution). +- `initial_address` (IPv6) — IP address that the parent query was launched from. +- `initial_port` (UInt16) — The client port that was used to make the parent query. +- `interface` (UInt8) — Interface that the query was initiated from. Possible values: + - 1 — TCP. + - 2 — HTTP. +- `os_user` (String) — OS's username who runs [clickhouse-client](../interfaces/cli.md). +- `client_hostname` (String) — Hostname of the client machine where the [clickhouse-client](../interfaces/cli.md) ou un autre client TCP est exécuté. +- `client_name` (String) — The [clickhouse-client](../interfaces/cli.md) ou un autre nom de client TCP. +- `client_revision` (UInt32) — Revision of the [clickhouse-client](../interfaces/cli.md) ou un autre client TCP. +- `client_version_major` (UInt32) — Major version of the [clickhouse-client](../interfaces/cli.md) ou un autre client TCP. +- `client_version_minor` (UInt32) — Minor version of the [clickhouse-client](../interfaces/cli.md) ou un autre client TCP. +- `client_version_patch` (UInt32) — Patch component of the [clickhouse-client](../interfaces/cli.md) ou une autre version du client TCP. +- `http_method` (UInt8) — HTTP method that initiated the query. Possible values: + - 0 — The query was launched from the TCP interface. + - 1 — `GET` la méthode a été utilisée. + - 2 — `POST` la méthode a été utilisée. +- `http_user_agent` (String) — The `UserAgent` en-tête passé dans la requête HTTP. +- `quota_key` (String) — The “quota key” spécifié dans le [quota](quotas.md) (voir `keyed`). +- `revision` (UInt32) — ClickHouse revision. +- `thread_numbers` (Array(UInt32)) — Number of threads that are participating in query execution. +- `ProfileEvents.Names` (Array(String)) — Counters that measure different metrics. The description of them could be found in the table [système.événement](#system_tables-events) +- `ProfileEvents.Values` (Array(UInt64)) — Values of metrics that are listed in the `ProfileEvents.Names` colonne. +- `Settings.Names` (Array(String)) — Names of settings that were changed when the client ran the query. To enable logging changes to settings, set the `log_query_settings` paramètre 1. +- `Settings.Values` (Array(String)) — Values of settings that are listed in the `Settings.Names` colonne. + +Chaque requête crée une ou deux lignes dans le `query_log` le tableau, en fonction de l'état de la requête: + +1. Si l'exécution de la requête est réussie, deux événements de type 1 et 2 sont créés (voir `type` colonne). +2. Si une erreur s'est produite pendant le traitement de la requête, deux événements avec les types 1 et 4 sont créés. +3. Si une erreur s'est produite avant le lancement de la requête, un seul événement de type 3 est créé. + +Par défaut, les journaux sont ajoutés à la table à des intervalles de 7,5 secondes. Vous pouvez définir cet intervalle dans la [query\_log](server_settings/settings.md#server_settings-query-log) configuration du serveur (voir `flush_interval_milliseconds` paramètre). Pour vider les journaux de force du tampon mémoire dans la table, utilisez le `SYSTEM FLUSH LOGS` requête. + +Lorsque la table est supprimée manuellement, il sera automatiquement créé à la volée. Notez que tous les précédents journaux seront supprimés. + +!!! note "Note" + La période de stockage des journaux est illimitée. Les journaux ne sont pas automatiquement supprimés de la table. Vous devez organiser vous-même la suppression des journaux obsolètes. + +Vous pouvez spécifier une clé de partitionnement arbitraire pour `system.query_log` la table dans le [query\_log](server_settings/settings.md#server_settings-query-log) configuration du serveur (voir `partition_by` paramètre). + +## système.query\_thread\_log {#system_tables-query-thread-log} + +La table contient des informations sur chaque thread d'exécution de requête. + +Clickhouse crée cette table uniquement si [query\_thread\_log](server_settings/settings.md#server_settings-query-thread-log) serveur paramètre est spécifié. Ce paramètre définit les règles de journalisation, tels que l'intervalle d'enregistrement ou le nom de la table, la requête sera connecté. + +Pour activer la journalisation des requêtes, définissez [log\_query\_threads](settings/settings.md#settings-log-query-threads) paramètre 1. Pour plus de détails, voir le [Paramètre](settings/settings.md) section. + +Colonne: + +- `event_date` (Date) — the date when the thread has finished execution of the query. +- `event_time` (DateTime) — the date and time when the thread has finished execution of the query. +- `query_start_time` (DateTime) — Start time of query execution. +- `query_duration_ms` (UInt64) — Duration of query execution. +- `read_rows` (UInt64) — Number of read rows. +- `read_bytes` (UInt64) — Number of read bytes. +- `written_rows` (UInt64) — For `INSERT` des requêtes, le nombre de lignes. Pour les autres requêtes, la valeur de la colonne est 0. +- `written_bytes` (UInt64) — For `INSERT` des requêtes, le nombre d'octets écrits. Pour les autres requêtes, la valeur de la colonne est 0. +- `memory_usage` (Int64) — The difference between the amount of allocated and freed memory in context of this thread. +- `peak_memory_usage` (Int64) — The maximum difference between the amount of allocated and freed memory in context of this thread. +- `thread_name` (String) — Name of the thread. +- `thread_number` (UInt32) — Internal thread ID. +- `os_thread_id` (Int32) — OS thread ID. +- `master_thread_id` (UInt64) — OS initial ID of initial thread. +- `query` (String) — Query string. +- `is_initial_query` (UInt8) — Query type. Possible values: + - 1 — Query was initiated by the client. + - 0 — Query was initiated by another query for distributed query execution. +- `user` (String) — Name of the user who initiated the current query. +- `query_id` (String) — ID of the query. +- `address` (IPv6) — IP address that was used to make the query. +- `port` (UInt16) — The client port that was used to make the query. +- `initial_user` (String) — Name of the user who ran the initial query (for distributed query execution). +- `initial_query_id` (String) — ID of the initial query (for distributed query execution). +- `initial_address` (IPv6) — IP address that the parent query was launched from. +- `initial_port` (UInt16) — The client port that was used to make the parent query. +- `interface` (UInt8) — Interface that the query was initiated from. Possible values: + - 1 — TCP. + - 2 — HTTP. +- `os_user` (String) — OS's username who runs [clickhouse-client](../interfaces/cli.md). +- `client_hostname` (String) — Hostname of the client machine where the [clickhouse-client](../interfaces/cli.md) ou un autre client TCP est exécuté. +- `client_name` (String) — The [clickhouse-client](../interfaces/cli.md) ou un autre nom de client TCP. +- `client_revision` (UInt32) — Revision of the [clickhouse-client](../interfaces/cli.md) ou un autre client TCP. +- `client_version_major` (UInt32) — Major version of the [clickhouse-client](../interfaces/cli.md) ou un autre client TCP. +- `client_version_minor` (UInt32) — Minor version of the [clickhouse-client](../interfaces/cli.md) ou un autre client TCP. +- `client_version_patch` (UInt32) — Patch component of the [clickhouse-client](../interfaces/cli.md) ou une autre version du client TCP. +- `http_method` (UInt8) — HTTP method that initiated the query. Possible values: + - 0 — The query was launched from the TCP interface. + - 1 — `GET` la méthode a été utilisée. + - 2 — `POST` la méthode a été utilisée. +- `http_user_agent` (String) — The `UserAgent` en-tête passé dans la requête HTTP. +- `quota_key` (String) — The “quota key” spécifié dans le [quota](quotas.md) (voir `keyed`). +- `revision` (UInt32) — ClickHouse revision. +- `ProfileEvents.Names` (Array(String)) — Counters that measure different metrics for this thread. The description of them could be found in the table [système.événement](#system_tables-events) +- `ProfileEvents.Values` (Array(UInt64)) — Values of metrics for this thread that are listed in the `ProfileEvents.Names` colonne. + +Par défaut, les journaux sont ajoutés à la table à des intervalles de 7,5 secondes. Vous pouvez définir cet intervalle dans la [query\_thread\_log](server_settings/settings.md#server_settings-query-thread-log) configuration du serveur (voir `flush_interval_milliseconds` paramètre). Pour vider les journaux de force du tampon mémoire dans la table, utilisez le `SYSTEM FLUSH LOGS` requête. + +Lorsque la table est supprimée manuellement, il sera automatiquement créé à la volée. Notez que tous les précédents journaux seront supprimés. + +!!! note "Note" + La période de stockage des journaux est illimitée. Les journaux ne sont pas automatiquement supprimés de la table. Vous devez organiser vous-même la suppression des journaux obsolètes. + +Vous pouvez spécifier une clé de partitionnement arbitraire pour `system.query_thread_log` la table dans le [query\_thread\_log](server_settings/settings.md#server_settings-query-thread-log) configuration du serveur (voir `partition_by` paramètre). + +## système.trace\_log {#system_tables-trace_log} + +Contient des traces de pile collectées par le profileur de requête d'échantillonnage. + +Clickhouse crée cette table lorsque le [trace\_log](server_settings/settings.md#server_settings-trace_log) la section de configuration du serveur est définie. Aussi l' [query\_profiler\_real\_time\_period\_ns](settings/settings.md#query_profiler_real_time_period_ns) et [query\_profiler\_cpu\_time\_period\_ns](settings/settings.md#query_profiler_cpu_time_period_ns) paramètres doivent être définis. + +Pour analyser les journaux, utilisez `addressToLine`, `addressToSymbol` et `demangle` fonctions d'introspection. + +Colonne: + +- `event_date`([Date](../data_types/date.md)) — Date of sampling moment. + +- `event_time`([DateTime](../data_types/datetime.md)) — Timestamp of sampling moment. + +- `revision`([UInt32](../data_types/int_uint.md)) — ClickHouse server build revision. + + Lors de la connexion au serveur par `clickhouse-client`, vous voyez la chaîne similaire à `Connected to ClickHouse server version 19.18.1 revision 54429.`. Ce champ contient le `revision` mais pas le `version` d'un serveur. + +- `timer_type`([Enum8](../data_types/enum.md)) — Timer type: + + - `Real` représente l'horloge murale. + - `CPU` représente le temps CPU. + +- `thread_number`([UInt32](../data_types/int_uint.md)) — Thread identifier. + +- `query_id`([Chaîne](../data_types/string.md)) — Query identifier that can be used to get details about a query that was running from the [query\_log](#system_tables-query_log) système de table. + +- `trace`([Tableau (UInt64)](../data_types/array.md)) — Stack trace at the moment of sampling. Each element is a virtual memory address inside ClickHouse server process. + +**Exemple** + +``` sql +SELECT * FROM system.trace_log LIMIT 1 \G +``` + +``` text +Row 1: +────── +event_date: 2019-11-15 +event_time: 2019-11-15 15:09:38 +revision: 54428 +timer_type: Real +thread_number: 48 +query_id: acc4d61f-5bd1-4a3e-bc91-2180be37c915 +trace: [94222141367858,94222152240175,94222152325351,94222152329944,94222152330796,94222151449980,94222144088167,94222151682763,94222144088167,94222151682763,94222144088167,94222144058283,94222144059248,94222091840750,94222091842302,94222091831228,94222189631488,140509950166747,140509942945935] +``` + +## système.réplique {#system_tables-replicas} + +Contient des informations et l'état des tables répliquées résidant sur le serveur local. +Ce tableau peut être utilisé pour la surveillance. La table contient une ligne pour chaque Répliqué\* table. + +Exemple: + +``` sql +SELECT * +FROM system.replicas +WHERE table = 'visits' +FORMAT Vertical +``` + +``` text +Row 1: +────── +database: merge +table: visits +engine: ReplicatedCollapsingMergeTree +is_leader: 1 +can_become_leader: 1 +is_readonly: 0 +is_session_expired: 0 +future_parts: 1 +parts_to_check: 0 +zookeeper_path: /clickhouse/tables/01-06/visits +replica_name: example01-06-1.yandex.ru +replica_path: /clickhouse/tables/01-06/visits/replicas/example01-06-1.yandex.ru +columns_version: 9 +queue_size: 1 +inserts_in_queue: 0 +merges_in_queue: 1 +part_mutations_in_queue: 0 +queue_oldest_time: 2020-02-20 08:34:30 +inserts_oldest_time: 0000-00-00 00:00:00 +merges_oldest_time: 2020-02-20 08:34:30 +part_mutations_oldest_time: 0000-00-00 00:00:00 +oldest_part_to_get: +oldest_part_to_merge_to: 20200220_20284_20840_7 +oldest_part_to_mutate_to: +log_max_index: 596273 +log_pointer: 596274 +last_queue_update: 2020-02-20 08:34:32 +absolute_delay: 0 +total_replicas: 2 +active_replicas: 2 +``` + +Colonne: + +- `database` (`String`) - Nom de base de données +- `table` (`String`)- Nom de la Table +- `engine` (`String`)- Nom du moteur de Table +- `is_leader` (`UInt8`) - Si la réplique est le chef de file. + Une seule réplique à la fois peut être le leader. Le leader est responsable de la sélection des fusions d'arrière-plan à effectuer. + Notez que les Écritures peuvent être effectuées sur n'importe quel réplica disponible et ayant une session dans ZK, qu'il s'agisse d'un leader. +- `can_become_leader` (`UInt8`)- Si la réplique peut être élue en tant que leader. +- `is_readonly` (`UInt8`) - Si la réplique est en mode lecture seule. + Ce mode est activé si la configuration n'a pas de sections avec ZooKeeper, si une erreur inconnue s'est produite lors de la réinitialisation des sessions dans ZooKeeper et lors de la réinitialisation des sessions dans ZooKeeper. +- `is_session_expired` (`UInt8`)- la session avec ZooKeeper a expiré. Fondamentalement le même que `is_readonly`. +- `future_parts` (`UInt32`)- Le nombre de parties de données qui apparaîtront à la suite D'insertions ou de fusions qui n'ont pas encore été effectuées. +- `parts_to_check` (`UInt32`) - Le nombre de parties des données dans la file d'attente pour la vérification. Une pièce est placée dans la file d'attente de vérification s'il y a un soupçon qu'elle pourrait être endommagée. +- `zookeeper_path` (`String`)- Chemin d'accès aux données de la table dans ZooKeeper. +- `replica_name` (`String`) - Réplique nom de la Gardienne. Différentes répliques d'une même table ont des noms différents. +- `replica_path` (`String`)- Chemin vers les données de réplique dans ZooKeeper. La même chose que la concaténation ‘zookeeper\_path/replicas/replica\_path’. +- `columns_version` (`Int32`)- Numéro de Version de la structure de la table. Indique combien de fois ALTER a été effectué. Si les répliques ont des versions différentes, cela signifie que certaines répliques n'ont pas encore Toutes les modifications. +- `queue_size` (`UInt32`),- La taille de la file d'attente pour les opérations en attente d'être exécuté. Les opérations comprennent l'insertion de blocs de données, les fusions et certaines autres actions. Il coïncide généralement avec `future_parts`. +- `inserts_in_queue` (`UInt32`) - Nombre d'insertions de blocs de données qui doivent être faits. Les Insertions sont généralement répliquées assez rapidement. Si ce nombre est grand, cela signifie que quelque chose est faux. +- `merges_in_queue` (`UInt32`) - Le nombre de fusions en attente d'être fait. Parfois, les fusions sont longues, donc cette valeur peut être supérieure à zéro pendant une longue période. +- `part_mutations_in_queue` (`UInt32`) - Le nombre de mutations en attente d'être fait. +- `queue_oldest_time` (`DateTime`) - Si `queue_size` supérieur à 0, indique quand l'opération la plus ancienne a été ajoutée à la file d'attente. +- `inserts_oldest_time` (`DateTime`) - Voir `queue_oldest_time` +- `merges_oldest_time` (`DateTime`) - Voir `queue_oldest_time` +- `part_mutations_oldest_time` (`DateTime`) - Voir `queue_oldest_time` + +Les 4 colonnes suivantes ont une valeur non nulle uniquement lorsqu'il y a une session active avec ZK. + +- `log_max_index` (`UInt64`) - Maximum nombre d'entrées dans le journal de l'activité générale. +- `log_pointer` (`UInt64`)- Numéro d'entrée Maximum dans le journal de l'activité générale que le réplica a copié dans sa file d'attente d'exécution, plus un. Si `log_pointer` est beaucoup plus petite que `log_max_index` quelque chose ne va pas. +- `last_queue_update` (`DateTime`) - Lorsque la file d'attente a été mise à jour la dernière fois. +- `absolute_delay` (`UInt64`)- Combien de décalage en secondes la réplique actuelle A. +- `total_replicas` (`UInt8`) - Le nombre total de répliques connues de ce tableau. +- `active_replicas` (`UInt8`) - Le nombre de répliques de cette table qui ont une session dans ZooKeeper (c'est-à-dire le nombre de répliques fonctionnelles). + +Si vous demandez toutes les colonnes, la table peut fonctionner un peu lentement, car plusieurs lectures de ZooKeeper sont faites pour chaque ligne. +Si vous ne demandez pas les 4 dernières colonnes (log\_max\_index, log\_pointer, total\_replicas, active\_replicas), la table fonctionne rapidement. + +Par exemple, vous pouvez vérifier que tout fonctionne correctement comme ceci: + +``` sql +SELECT + database, + table, + is_leader, + is_readonly, + is_session_expired, + future_parts, + parts_to_check, + columns_version, + queue_size, + inserts_in_queue, + merges_in_queue, + log_max_index, + log_pointer, + total_replicas, + active_replicas +FROM system.replicas +WHERE + is_readonly + OR is_session_expired + OR future_parts > 20 + OR parts_to_check > 10 + OR queue_size > 20 + OR inserts_in_queue > 10 + OR log_max_index - log_pointer > 10 + OR total_replicas < 2 + OR active_replicas < total_replicas +``` + +Si cette requête ne retourne rien, cela signifie que tout va bien. + +## système.paramètre {#system-settings} + +Contient des informations sur les paramètres actuellement utilisés. +I. e. utilisé pour l'exécution de la requête que vous utilisez pour lire à partir du système.les paramètres de la table. + +Colonne: + +- `name` (String) — Setting name. +- `value` (String) — Setting value. +- `changed` (UInt8) — Whether the setting was explicitly defined in the config or explicitly changed. + +Exemple: + +``` sql +SELECT * +FROM system.settings +WHERE changed +``` + +``` text +┌─name───────────────────┬─value───────┬─changed─┐ +│ max_threads │ 8 │ 1 │ +│ use_uncompressed_cache │ 0 │ 1 │ +│ load_balancing │ random │ 1 │ +│ max_memory_usage │ 10000000000 │ 1 │ +└────────────────────────┴─────────────┴─────────┘ +``` + +## système.tableau\_moteurs {#system-table-engines} + +Contient une description des moteurs de table pris en charge par le serveur et leurs informations de support de fonctionnalité. + +Ce tableau contient les colonnes suivantes (le type de colonne est indiqué entre parenthèses): + +- `name` (String) — The name of table engine. +- `supports_settings` (UInt8) — Flag that indicates if table engine supports `SETTINGS` clause. +- `supports_skipping_indices` (UInt8) — Flag that indicates if table engine supports [sauter les indices](table_engines/mergetree/#table_engine-mergetree-data_skipping-indexes). +- `supports_ttl` (UInt8) — Flag that indicates if table engine supports [TTL](table_engines/mergetree/#table_engine-mergetree-ttl). +- `supports_sort_order` (UInt8) — Flag that indicates if table engine supports clauses `PARTITION_BY`, `PRIMARY_KEY`, `ORDER_BY` et `SAMPLE_BY`. +- `supports_replication` (UInt8) — Flag that indicates if table engine supports [réplication des données](table_engines/replication/). +- `supports_duduplication` (UInt8) — Flag that indicates if table engine supports data deduplication. + +Exemple: + +``` sql +SELECT * +FROM system.table_engines +WHERE name in ('Kafka', 'MergeTree', 'ReplicatedCollapsingMergeTree') +``` + +``` text +┌─name──────────────────────────┬─supports_settings─┬─supports_skipping_indices─┬─supports_sort_order─┬─supports_ttl─┬─supports_replication─┬─supports_deduplication─┐ +│ Kafka │ 1 │ 0 │ 0 │ 0 │ 0 │ 0 │ +│ MergeTree │ 1 │ 1 │ 1 │ 1 │ 0 │ 0 │ +│ ReplicatedCollapsingMergeTree │ 1 │ 1 │ 1 │ 1 │ 1 │ 1 │ +└───────────────────────────────┴───────────────────┴───────────────────────────┴─────────────────────┴──────────────┴──────────────────────┴────────────────────────┘ +``` + +**Voir aussi** + +- Famille MergeTree [les clauses de requête](table_engines/mergetree.md#mergetree-query-clauses) +- Kafka [paramètre](table_engines/kafka.md#table_engine-kafka-creating-a-table) +- Rejoindre [paramètre](table_engines/join.md#join-limitations-and-settings) + +## système.table {#system-tables} + +Contient les métadonnées de chaque table que le serveur connaît. Les tableaux détachés ne sont pas représentés dans `system.tables`. + +Ce tableau contient les colonnes suivantes (le type de colonne est indiqué entre parenthèses): + +- `database` (String) — The name of the database the table is in. +- `name` (String) — Table name. +- `engine` (String) — Table engine name (without parameters). +- `is_temporary` (UInt8) - indicateur qui indique si la table est temporaire. +- `data_path` (Chaîne) - chemin d'accès aux données de la table dans le système de fichiers. +- `metadata_path` (Chaîne) - chemin d'accès aux métadonnées de la table dans le système de fichiers. +- `metadata_modification_time` (DateTime) - Heure de la dernière modification des métadonnées de la table. +- `dependencies_database` (Array (String)) - dépendances de base de données. +- `dependencies_table` (Array (String)) - dépendances de Table ([MaterializedView](table_engines/materializedview.md) tables basées sur le tableau actuel). +- `create_table_query` (Chaîne) - la requête qui a été utilisée pour créer la table. +- `engine_full` (Chaîne) - paramètres du moteur de table. +- `partition_key` (String) - l'expression de clé de partition spécifiée dans le tableau. +- `sorting_key` (String) - l'expression de clé de tri spécifiée dans la table. +- `primary_key` (String) - l'expression de clé primaire spécifiée dans la table. +- `sampling_key` (String) - l'expression de clé d'échantillonnage spécifiée dans la table. + +Le `system.tables` le tableau est utilisé dans `SHOW TABLES` implémentation de requête. + +## système.zookeeper {#system-zookeeper} + +La table n'existe pas si ZooKeeper n'est pas configuré. Permet de lire les données du cluster Zookeeper défini dans la configuration. +La requête doit avoir un ‘path’ condition d'égalité dans la clause WHERE. C'est le chemin dans ZooKeeper pour les enfants pour lesquels vous souhaitez obtenir des données. + +Requête `SELECT * FROM system.zookeeper WHERE path = '/clickhouse'` données de sortie pour tous les enfants `/clickhouse` nœud. +Pour générer des données pour tous les nœuds racine, écrivez path = ‘/’. +Si le chemin d'accès spécifié dans ‘path’ n'existe pas, une exception sera levée. + +Colonne: + +- `name` (String) — The name of the node. +- `path` (String) — The path to the node. +- `value` (String) — Node value. +- `dataLength` (Int32) — Size of the value. +- `numChildren` (Int32) — Number of descendants. +- `czxid` (Int64) — ID of the transaction that created the node. +- `mzxid` (Int64) — ID of the transaction that last changed the node. +- `pzxid` (Int64) — ID of the transaction that last deleted or added descendants. +- `ctime` (DateTime) — Time of node creation. +- `mtime` (DateTime) — Time of the last modification of the node. +- `version` (Int32) — Node version: the number of times the node was changed. +- `cversion` (Int32) — Number of added or removed descendants. +- `aversion` (Int32) — Number of changes to the ACL. +- `ephemeralOwner` (Int64) — For ephemeral nodes, the ID of the session that owns this node. + +Exemple: + +``` sql +SELECT * +FROM system.zookeeper +WHERE path = '/clickhouse/tables/01-08/visits/replicas' +FORMAT Vertical +``` + +``` text +Row 1: +────── +name: example01-08-1.yandex.ru +value: +czxid: 932998691229 +mzxid: 932998691229 +ctime: 2015-03-27 16:49:51 +mtime: 2015-03-27 16:49:51 +version: 0 +cversion: 47 +aversion: 0 +ephemeralOwner: 0 +dataLength: 0 +numChildren: 7 +pzxid: 987021031383 +path: /clickhouse/tables/01-08/visits/replicas + +Row 2: +────── +name: example01-08-2.yandex.ru +value: +czxid: 933002738135 +mzxid: 933002738135 +ctime: 2015-03-27 16:57:01 +mtime: 2015-03-27 16:57:01 +version: 0 +cversion: 37 +aversion: 0 +ephemeralOwner: 0 +dataLength: 0 +numChildren: 7 +pzxid: 987021252247 +path: /clickhouse/tables/01-08/visits/replicas +``` + +## système.mutation {#system_tables-mutations} + +Le tableau contient des informations sur [mutation](../query_language/alter.md#alter-mutations) des tables MergeTree et leur progression. Chaque commande de mutation est représentée par une seule ligne. Le tableau comporte les colonnes suivantes: + +**base de données**, **table** - Le nom de la base de données et de la table à laquelle la mutation a été appliquée. + +**mutation\_id** - Le numéro d'identification de la mutation. Pour les tables répliquées ces ID correspondent aux noms znode dans le `/mutations/` répertoire de la Gardienne. Pour les tables non compliquées, Les Id correspondent aux noms de fichiers dans le répertoire de données de la table. + +**commande** - La chaîne de commande mutation (la partie de la requête après `ALTER TABLE [db.]table`). + +**create\_time** - Quand cette commande de mutation a été soumise pour exécution. + +**block\_numbers.partition\_id**, **block\_numbers.nombre** - Une colonne imbriquée. Pour les mutations de tables répliquées, il contient un enregistrement pour chaque partition: l'ID de partition et le numéro de bloc acquis par la mutation (dans chaque partition, seules les parties contenant des blocs avec des nombres inférieurs au numéro de bloc acquis par la mutation dans cette partition seront mutées). Dans les tables non répliquées, les numéros de bloc de toutes les partitions forment une seule séquence. Cela signifie que pour les mutations de tables non répliquées, la colonne contiendra un enregistrement avec un seul numéro de bloc acquis par la mutation. + +**parts\_to\_do** - Le nombre de parties de données qui doivent être mutées pour que la mutation se termine. + +**\_done** - La mutation est faite? Notez que même si `parts_to_do = 0` il est possible qu'une mutation d'une table répliquée ne soit pas encore effectuée en raison d'un INSERT de longue durée qui créera une nouvelle partie de données qui devra être mutée. + +S'il y avait des problèmes avec la mutation de certaines parties, les colonnes suivantes contiennent des informations supplémentaires: + +**latest\_failed\_part** - Le nom de la partie la plus récente qui n'a pas pu être mutée. + +**latest\_fail\_time** - Le temps de la partie la plus récente mutation de l'échec. + +**latest\_fail\_reason** - Le message d'exception qui a provoqué l'échec de la mutation de pièce la plus récente. + +## système.disque {#system_tables-disks} + +Contient des informations sur les disques définis dans [configuration du serveur](table_engines/mergetree.md#table_engine-mergetree-multiple-volumes_configure). + +Colonne: + +- `name` ([Chaîne](../data_types/string.md)) — Name of a disk in the server configuration. +- `path` ([Chaîne](../data_types/string.md)) — Path to the mount point in the file system. +- `free_space` ([UInt64](../data_types/int_uint.md)) — Free space on disk in bytes. +- `total_space` ([UInt64](../data_types/int_uint.md)) — Disk volume in bytes. +- `keep_free_space` ([UInt64](../data_types/int_uint.md)) — Amount of disk space that should stay free on disk in bytes. Defined in the `keep_free_space_bytes` paramètre de configuration du disque. + +## système.storage\_policies {#system_tables-storage_policies} + +Contient des informations sur les stratégies de stockage et les volumes définis [configuration du serveur](table_engines/mergetree.md#table_engine-mergetree-multiple-volumes_configure). + +Colonne: + +- `policy_name` ([Chaîne](../data_types/string.md)) — Name of the storage policy. +- `volume_name` ([Chaîne](../data_types/string.md)) — Volume name defined in the storage policy. +- `volume_priority` ([UInt64](../data_types/int_uint.md)) — Volume order number in the configuration. +- `disks` ([Tableau(String)](../data_types/array.md)) — Disk names, defined in the storage policy. +- `max_data_part_size` ([UInt64](../data_types/int_uint.md)) — Maximum size of a data part that can be stored on volume disks (0 — no limit). +- `move_factor` ([Float64](../data_types/float.md)) — Ratio of free disk space. When the ratio exceeds the value of configuration parameter, ClickHouse start to move data to the next volume in order. + +Si la stratégie de stockage contient plus d'un volume, les informations pour chaque volume sont stockées dans la ligne individuelle de la table. + +[Article Original](https://clickhouse.tech/docs/en/operations/system_tables/) diff --git a/docs/fr/operations/table_engines/aggregatingmergetree.md b/docs/fr/operations/table_engines/aggregatingmergetree.md new file mode 100644 index 00000000000..f0585261d2b --- /dev/null +++ b/docs/fr/operations/table_engines/aggregatingmergetree.md @@ -0,0 +1,99 @@ +--- +machine_translated: true +--- + +# AggregatingMergeTree {#aggregatingmergetree} + +Le moteur hérite de [MergeTree](mergetree.md#table_engines-mergetree), modifier la logique pour les parties de données Fusion. ClickHouse remplace toutes les lignes avec la même clé primaire (ou, plus précisément, avec la même [clé de tri](mergetree.md)) avec une seule ligne (dans un rayon d'une partie des données) qui stocke une combinaison d'états de fonctions d'agrégation. + +Vous pouvez utiliser `AggregatingMergeTree` tables pour l'agrégation incrémentielle des données, y compris pour les vues matérialisées agrégées. + +Le moteur traite toutes les colonnes avec [AggregateFunction](../../data_types/nested_data_structures/aggregatefunction.md) type. + +Il est approprié d'utiliser `AggregatingMergeTree` si elle réduit le nombre de lignes par commande. + +## Création d'une Table {#creating-a-table} + +``` sql +CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] +( + name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1], + name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2], + ... +) ENGINE = AggregatingMergeTree() +[PARTITION BY expr] +[ORDER BY expr] +[SAMPLE BY expr] +[TTL expr] +[SETTINGS name=value, ...] +``` + +Pour une description des paramètres de requête, voir [demande de description](../../query_language/create.md). + +**Les clauses de requête** + +Lors de la création d'un `AggregatingMergeTree` la table de la même [clause](mergetree.md) sont nécessaires, comme lors de la création d'un `MergeTree` table. + +
+ +Méthode obsolète pour créer une Table + +!!! attention "Attention" + N'utilisez pas cette méthode dans les nouveaux projets et, si possible, remplacez les anciens projets par la méthode décrite ci-dessus. + +``` sql +CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] +( + name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1], + name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2], + ... +) ENGINE [=] AggregatingMergeTree(date-column [, sampling_expression], (primary, key), index_granularity) +``` + +Tous les paramètres ont la même signification que dans `MergeTree`. +
+ +## Sélectionner et insérer {#select-and-insert} + +Pour insérer des données, utilisez [INSERT SELECT](../../query_language/insert_into.md) requête avec l'ensemble-l'État des fonctions. +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. + +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 alors ce vidage peut être chargé en utilisant `INSERT` requête. + +## Exemple D'une vue matérialisée agrégée {#example-of-an-aggregated-materialized-view} + +`AggregatingMergeTree` vue matérialisée qui regarde le `test.visits` table: + +``` sql +CREATE MATERIALIZED VIEW test.basic +ENGINE = AggregatingMergeTree() PARTITION BY toYYYYMM(StartDate) ORDER BY (CounterID, StartDate) +AS SELECT + CounterID, + StartDate, + sumState(Sign) AS Visits, + uniqState(UserID) AS Users +FROM test.visits +GROUP BY CounterID, StartDate; +``` + +Insertion de données dans la `test.visits` table. + +``` sql +INSERT INTO test.visits ... +``` + +Les données sont insérées dans la table et la vue `test.basic` que va effectuer l'agrégation. + +Pour obtenir les données agrégées, nous devons exécuter une requête telle que `SELECT ... GROUP BY ...` à partir de la vue `test.basic`: + +``` sql +SELECT + StartDate, + sumMerge(Visits) AS Visits, + uniqMerge(Users) AS Users +FROM test.basic +GROUP BY StartDate +ORDER BY StartDate; +``` + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/aggregatingmergetree/) diff --git a/docs/fr/operations/table_engines/buffer.md b/docs/fr/operations/table_engines/buffer.md new file mode 100644 index 00000000000..2b7064cfc42 --- /dev/null +++ b/docs/fr/operations/table_engines/buffer.md @@ -0,0 +1,68 @@ +--- +machine_translated: true +--- + +# Tampon {#buffer} + +Met en mémoire tampon les données à écrire dans la RAM, les vidant périodiquement dans une autre table. Pendant l'opération de lecture, les données sont lues à partir de la mémoire tampon, et l'autre simultanément. + +``` sql +Buffer(database, table, num_layers, min_time, max_time, min_rows, max_rows, min_bytes, max_bytes) +``` + +Les paramètres du moteur: + +- `database` – Database name. Instead of the database name, you can use a constant expression that returns a string. +- `table` – Table to flush data to. +- `num_layers` – Parallelism layer. Physically, the table will be represented as `num_layers` indépendant de tampons. Valeur recommandée: 16. +- `min_time`, `max_time`, `min_rows`, `max_rows`, `min_bytes`, et `max_bytes` – Conditions for flushing data from the buffer. + +Les données sont vidées du tampon et écrites dans la table de destination si toutes les `min*` conditions ou au moins un `max*` conditions sont remplies. + +- `min_time`, `max_time` – Condition for the time in seconds from the moment of the first write to the buffer. +- `min_rows`, `max_rows` – Condition for the number of rows in the buffer. +- `min_bytes`, `max_bytes` – Condition for the number of bytes in the buffer. + +Pendant l'opération d'écriture, les données sont insérées dans un `num_layers` nombre aléatoire de tampons. Ou, si la partie de données à insérer est suffisamment grande (supérieure à `max_rows` ou `max_bytes`), il est écrit directement dans la table de destination, en omettant le tampon. + +Les conditions de purger les données sont calculées séparément pour chacun des `num_layers` tampon. Par exemple, si `num_layers = 16` et `max_bytes = 100000000`, la consommation maximale de RAM est de 1,6 Go. + +Exemple: + +``` sql +CREATE TABLE merge.hits_buffer AS merge.hits ENGINE = Buffer(merge, hits, 16, 10, 100, 10000, 1000000, 10000000, 100000000) +``` + +La création d'un ‘merge.hits\_buffer’ table avec la même structure que ‘merge.hits’ et en utilisant le moteur tampon. Lors de l'écriture dans cette table, les données sont mises en mémoire tampon dans la RAM ‘merge.hits’ table. 16 tampons sont créés. Les données dans chacun d'entre eux est rincé si 100 secondes sont écoulées, ou un million de lignes ont été écrites, ou 100 MO de données ont été écrits; ou si, simultanément, 10 secondes et 10 000 lignes et 10 MO de données ont été écrites. Par exemple, si une ligne a été écrite, après 100 secondes, il sera vidé, n'importe quoi. Mais si plusieurs lignes ont été écrites, les données seront vidées plus tôt. + +Lorsque le serveur est arrêté, avec DROP TABLE ou DETACH TABLE, les données du tampon sont également vidées vers la table de destination. + +Vous pouvez définir des chaînes vides entre guillemets simples pour le nom de la base de données et de la table. Cela indique l'absence d'une table de destination. Dans ce cas, lorsque les conditions de vidage des données sont atteintes, le tampon est simplement effacé. Cela peut être utile pour garder une fenêtre de données dans la mémoire. + +Lors de la lecture à partir d'une table tampon, les données sont traitées à la fois à partir du tampon et de la table de destination (s'il y en a une). +Notez que les tables de tampon ne prennent pas en charge un index. En d'autres termes, les données dans le tampon sont entièrement analysées, ce qui peut être lent pour les grands tampons. (Pour les données dans une table subordonnée, l'index qu'il prend en charge sera utilisé.) + +Si l'ensemble de colonnes de la table tampon ne correspond pas à l'ensemble de colonnes d'une table subordonnée, un sous-ensemble de colonnes existant dans les deux tables est inséré. + +Si les types ne correspondent pas à l'une des colonnes de la table tampon et à une table subordonnée, un message d'erreur est entré dans le journal du serveur et le tampon est effacé. +La même chose se produit si la table subordonnée n'existe pas lorsque le tampon est vidé. + +Si vous devez exécuter ALTER pour une table subordonnée et la table tampon, nous vous recommandons de supprimer d'abord la table tampon, d'exécuter ALTER pour la table subordonnée, puis de créer à nouveau la table tampon. + +Si le serveur est redémarré anormalement, les données dans le tampon sont perdues. + +FINAL et SAMPLE ne fonctionnent pas correctement pour les tables tampon. Ces conditions sont transmises à la table de destination, mais ne sont pas utilisées pour traiter les données dans le tampon. Si ces fonctionnalités sont nécessaires, nous vous recommandons d'utiliser uniquement la table tampon pour l'écriture, lors de la lecture à partir de la table de destination. + +Lors de l'ajout de données à un Tampon, un des tampons est verrouillé. Cela entraîne des retards si une opération de lecture est effectuée simultanément à partir de la table. + +Les données insérées dans une table tampon peuvent se retrouver dans la table subordonnée dans un ordre différent et dans des blocs différents. Pour cette raison, une table tampon est difficile à utiliser pour écrire correctement dans un CollapsingMergeTree. Pour éviter les problèmes, vous pouvez définir ‘num\_layers’ 1. + +Si la table de destination est répliquée, certaines caractéristiques attendues des tables répliquées sont perdues lors de l'écriture dans une table tampon. Les modifications aléatoires apportées à l'ordre des lignes et des tailles des parties de données provoquent l'arrêt de la déduplication des données, ce qui signifie qu'il n'est pas possible d'avoir un ‘exactly once’ Ecrire dans des tables répliquées. + +En raison de ces inconvénients, nous ne pouvons recommander l'utilisation d'une table tampon que dans de rares cas. + +Une table tampon est utilisée lorsque trop D'insertions sont reçues d'un grand nombre de serveurs sur une unité de temps et que les données ne peuvent pas être mises en mémoire tampon avant l'insertion, ce qui signifie que les insertions ne peuvent pas s'exécuter assez rapidement. + +Notez qu'il n'est pas judicieux d'insérer des données d'une ligne de temps, même pour Tampon tables. Cela ne produira qu'une vitesse de quelques milliers de lignes par seconde, tandis que l'insertion de blocs de données plus grands peut produire plus d'un million de lignes par seconde (voir la section “Performance”). + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/buffer/) diff --git a/docs/fr/operations/table_engines/collapsingmergetree.md b/docs/fr/operations/table_engines/collapsingmergetree.md new file mode 100644 index 00000000000..9c769b4a156 --- /dev/null +++ b/docs/fr/operations/table_engines/collapsingmergetree.md @@ -0,0 +1,306 @@ +--- +machine_translated: true +--- + +# CollapsingMergeTree {#table_engine-collapsingmergetree} + +Le moteur hérite de [MergeTree](mergetree.md) et ajoute la logique de l'effondrement des lignes de données de pièces algorithme de fusion. + +`CollapsingMergeTree` supprime de manière asynchrone (réduit) les paires de lignes si tous les champs d'une clé de tri (`ORDER BY`) sont équivalents à l'exception du champ particulier `Sign` ce qui peut avoir `1` et `-1` valeur. Les lignes sans paire sont conservées. Pour plus de détails, voir le [Effondrer](#table_engine-collapsingmergetree-collapsing) la section du document. + +Le moteur peut réduire considérablement le volume de stockage et augmenter l'efficacité de `SELECT` requête en conséquence. + +## Création d'une Table {#creating-a-table} + +``` sql +CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] +( + name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1], + name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2], + ... +) ENGINE = CollapsingMergeTree(sign) +[PARTITION BY expr] +[ORDER BY expr] +[SAMPLE BY expr] +[SETTINGS name=value, ...] +``` + +Pour une description des paramètres de requête, voir [description de la requête](../../query_language/create.md). + +**Paramètres CollapsingMergeTree** + +- `sign` — Name of the column with the type of row: `1` est un “state” rangée, `-1` est un “cancel” rangée. + + Column data type — `Int8`. + +**Les clauses de requête** + +Lors de la création d'un `CollapsingMergeTree` de table, de la même [les clauses de requête](mergetree.md#table_engine-mergetree-creating-a-table) sont nécessaires, comme lors de la création d'un `MergeTree` table. + +
+ +Méthode obsolète pour créer une Table + +!!! attention "Attention" + N'utilisez pas cette méthode dans les nouveaux projets et, si possible, remplacez les anciens projets par la méthode décrite ci-dessus. + +``` sql +CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] +( + name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1], + name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2], + ... +) ENGINE [=] CollapsingMergeTree(date-column [, sampling_expression], (primary, key), index_granularity, sign) +``` + +Tous les paramètres excepté `sign` ont la même signification que dans `MergeTree`. + +- `sign` — Name of the column with the type of row: `1` — “state” rangée, `-1` — “cancel” rangée. + + Column Data Type — `Int8`. + +
+ +## Effondrer {#table_engine-collapsingmergetree-collapsing} + +### Données {#data} + +Considérez la situation où vous devez enregistrer des données en constante évolution pour un objet. Il semble logique d'avoir une ligne pour un objet et de la mettre à jour à tout changement, mais l'opération de mise à jour est coûteuse et lente pour le SGBD car elle nécessite une réécriture des données dans le stockage. Si vous avez besoin d'écrire des données rapidement, la mise à jour n'est pas acceptable, mais vous pouvez écrire les modifications d'un objet de manière séquentielle comme suit. + +Utilisez la colonne particulière `Sign`. Si `Sign = 1` cela signifie que la ligne est un état d'un objet, appelons-la “state” rangée. Si `Sign = -1` il signifie l'annulation de l'état d'un objet avec les mêmes attributs, nous allons l'appeler “cancel” rangée. + +Par exemple, nous voulons calculer combien de pages les utilisateurs ont vérifié sur un site et combien de temps ils étaient là. À un certain moment nous écrire la ligne suivante avec l'état de l'activité de l'utilisateur: + +``` text +┌──────────────UserID─┬─PageViews─┬─Duration─┬─Sign─┐ +│ 4324182021466249494 │ 5 │ 146 │ 1 │ +└─────────────────────┴───────────┴──────────┴──────┘ +``` + +À un moment donné, nous enregistrons le changement d'activité de l'utilisateur et l'écrivons avec les deux lignes suivantes. + +``` text +┌──────────────UserID─┬─PageViews─┬─Duration─┬─Sign─┐ +│ 4324182021466249494 │ 5 │ 146 │ -1 │ +│ 4324182021466249494 │ 6 │ 185 │ 1 │ +└─────────────────────┴───────────┴──────────┴──────┘ +``` + +La première ligne annule le précédent état de l'objet (utilisateur). Il doit copier les champs de clé de tri de l'état annulé sauf `Sign`. + +La deuxième ligne contient l'état actuel. + +Comme nous avons besoin seulement le dernier état de l'activité de l'utilisateur, les lignes + +``` text +┌──────────────UserID─┬─PageViews─┬─Duration─┬─Sign─┐ +│ 4324182021466249494 │ 5 │ 146 │ 1 │ +│ 4324182021466249494 │ 5 │ 146 │ -1 │ +└─────────────────────┴───────────┴──────────┴──────┘ +``` + +peut être supprimé en réduisant l'état invalide (ancien) d'un objet. `CollapsingMergeTree` fait cela lors de la fusion des parties de données. + +Pourquoi nous avons besoin de 2 lignes pour chaque changement lu dans le [Algorithme](#table_engine-collapsingmergetree-collapsing-algorithm) paragraphe. + +**Propriétés particulières d'une telle approche** + +1. Le programme qui écrit les données doit se souvenir de l'état d'un objet pour pouvoir l'annuler. “Cancel” string doit contenir des copies des champs de clé de tri du “state” chaîne et le contraire `Sign`. Il augmente la taille initiale de stockage, mais permet d'écrire les données rapidement. +2. Les tableaux de plus en plus longs dans les colonnes réduisent l'efficacité du moteur en raison de la charge pour l'écriture. Plus les données sont simples, plus l'efficacité est élevée. +3. Le `SELECT` les résultats dépendent fortement de la cohérence de l'historique des modifications d'objet. Être précis lors de la préparation des données pour l'insertion. Vous pouvez obtenir des résultats imprévisibles dans des données incohérentes, par exemple des valeurs négatives pour des mesures non négatives telles que la profondeur de session. + +### Algorithme {#table_engine-collapsingmergetree-collapsing-algorithm} + +Lorsque ClickHouse fusionne des parties de données, chaque groupe de lignes consécutives avec la même clé de tri (`ORDER BY`) est réduit à pas plus de deux rangées, une avec `Sign = 1` (“state” ligne) et l'autre avec `Sign = -1` (“cancel” rangée). En d'autres termes, les entrées de l'effondrement. + +Pour chaque partie de données résultante clickhouse enregistre: + +1. Première “cancel” et la dernière “state” lignes, si le nombre de “state” et “cancel” lignes correspond et la dernière ligne est un “state” rangée. + +2. La dernière “state” ligne, si il y a plus de “state” les lignes de “cancel” rangée. + +3. Première “cancel” ligne, si il y a plus de “cancel” les lignes de “state” rangée. + +4. Aucune des lignes, dans tous les autres cas. + +Aussi quand il y a au moins 2 plus “state” les lignes de “cancel” les lignes, ou au moins 2 de plus “cancel” rangs puis “state” la fusion continue, mais ClickHouse traite cette situation comme une erreur logique et l'enregistre dans le journal du serveur. Cette erreur peut se produire si les mêmes données ont été insérées plus d'une fois. + +Ainsi, l'effondrement ne devrait pas changer les résultats du calcul des statistiques. +Les changements se sont progressivement effondrés de sorte qu'à la fin seul le dernier état de presque tous les objets à gauche. + +Le `Sign` est nécessaire car l'algorithme de fusion ne garantit pas que toutes les lignes avec la même clé de tri seront dans la même partie de données résultante et même sur le même serveur physique. Processus de ClickHouse `SELECT` les requêtes avec plusieurs threads, et il ne peut pas prédire l'ordre des lignes dans le résultat. L'agrégation est nécessaire s'il y a un besoin d'obtenir complètement “collapsed” les données de `CollapsingMergeTree` table. + +Pour finaliser la réduction, écrivez une requête avec `GROUP BY` fonctions de clause et d'agrégation qui tiennent compte du signe. Par exemple, pour calculer la quantité, l'utilisation `sum(Sign)` plutôt `count()`. Pour calculer la somme de quelque chose, utilisez `sum(Sign * x)` plutôt `sum(x)` et ainsi de suite , et également ajouter `HAVING sum(Sign) > 0`. + +Aggregate `count`, `sum` et `avg` pourrait être calculée de cette manière. Aggregate `uniq` peut être calculé si un objet a au moins un état non réduit. Aggregate `min` et `max` impossible de calculer parce que `CollapsingMergeTree` n'enregistre pas l'historique des valeurs des États réduits. + +Si vous avez besoin d'extraire des données sans agrégation (par exemple, pour vérifier si des lignes sont présentes dont les valeurs les plus récentes correspondent à certaines conditions), vous pouvez utiliser `FINAL` le modificateur du `FROM` clause. Cette approche est nettement moins efficace. + +## Exemple d'utilisation {#example-of-use} + +Les données de l'exemple: + +``` text +┌──────────────UserID─┬─PageViews─┬─Duration─┬─Sign─┐ +│ 4324182021466249494 │ 5 │ 146 │ 1 │ +│ 4324182021466249494 │ 5 │ 146 │ -1 │ +│ 4324182021466249494 │ 6 │ 185 │ 1 │ +└─────────────────────┴───────────┴──────────┴──────┘ +``` + +Création de la table: + +``` sql +CREATE TABLE UAct +( + UserID UInt64, + PageViews UInt8, + Duration UInt8, + Sign Int8 +) +ENGINE = CollapsingMergeTree(Sign) +ORDER BY UserID +``` + +Insertion des données: + +``` sql +INSERT INTO UAct VALUES (4324182021466249494, 5, 146, 1) +``` + +``` sql +INSERT INTO UAct VALUES (4324182021466249494, 5, 146, -1),(4324182021466249494, 6, 185, 1) +``` + +Nous utilisons deux `INSERT` requêtes pour créer deux parties de données différentes. Si nous insérons les données avec une requête, ClickHouse crée une partie de données et n'effectuera aucune fusion. + +L'obtention de données: + +``` sql +SELECT * FROM UAct +``` + +``` text +┌──────────────UserID─┬─PageViews─┬─Duration─┬─Sign─┐ +│ 4324182021466249494 │ 5 │ 146 │ -1 │ +│ 4324182021466249494 │ 6 │ 185 │ 1 │ +└─────────────────────┴───────────┴──────────┴──────┘ +┌──────────────UserID─┬─PageViews─┬─Duration─┬─Sign─┐ +│ 4324182021466249494 │ 5 │ 146 │ 1 │ +└─────────────────────┴───────────┴──────────┴──────┘ +``` + +Que voyons-nous et où s'effondre? + +Avec deux `INSERT` requêtes, nous avons créé 2 parties de données. Le `SELECT` la requête a été effectuée dans 2 threads, et nous avons obtenu un ordre aléatoire de lignes. L'effondrement n'a pas eu lieu car il n'y avait pas encore de fusion des parties de données. ClickHouse fusionne une partie des données dans un moment inconnu que nous ne pouvons pas prédire. + +Nous avons donc besoin d'agrégation: + +``` sql +SELECT + UserID, + sum(PageViews * Sign) AS PageViews, + sum(Duration * Sign) AS Duration +FROM UAct +GROUP BY UserID +HAVING sum(Sign) > 0 +``` + +``` text +┌──────────────UserID─┬─PageViews─┬─Duration─┐ +│ 4324182021466249494 │ 6 │ 185 │ +└─────────────────────┴───────────┴──────────┘ +``` + +Si nous n'avons pas besoin d'agrégation et de vouloir forcer l'effondrement, nous pouvons utiliser `FINAL` le modificateur `FROM` clause. + +``` sql +SELECT * FROM UAct FINAL +``` + +``` text +┌──────────────UserID─┬─PageViews─┬─Duration─┬─Sign─┐ +│ 4324182021466249494 │ 6 │ 185 │ 1 │ +└─────────────────────┴───────────┴──────────┴──────┘ +``` + +Cette façon de sélectionner les données est très inefficace. Ne l'utilisez pas pour les grandes tables. + +## Exemple d'une autre approche {#example-of-another-approach} + +Les données de l'exemple: + +``` text +┌──────────────UserID─┬─PageViews─┬─Duration─┬─Sign─┐ +│ 4324182021466249494 │ 5 │ 146 │ 1 │ +│ 4324182021466249494 │ -5 │ -146 │ -1 │ +│ 4324182021466249494 │ 6 │ 185 │ 1 │ +└─────────────────────┴───────────┴──────────┴──────┘ +``` + +L'idée est que les fusions ne prennent en compte que les champs clés. Et dans le “Cancel” ligne nous pouvons spécifier des valeurs négatives qui égalisent la version précédente de la ligne lors de la sommation sans utiliser la colonne de signe. Pour cette approche, il est nécessaire de changer le type de données `PageViews`,`Duration` pour stocker les valeurs négatives de UInt8 - \> Int16. + +``` sql +CREATE TABLE UAct +( + UserID UInt64, + PageViews Int16, + Duration Int16, + Sign Int8 +) +ENGINE = CollapsingMergeTree(Sign) +ORDER BY UserID +``` + +Nous allons tester l'approche: + +``` sql +insert into UAct values(4324182021466249494, 5, 146, 1); +insert into UAct values(4324182021466249494, -5, -146, -1); +insert into UAct values(4324182021466249494, 6, 185, 1); + +select * from UAct final; // avoid using final in production (just for a test or small tables) +``` + +``` text +┌──────────────UserID─┬─PageViews─┬─Duration─┬─Sign─┐ +│ 4324182021466249494 │ 6 │ 185 │ 1 │ +└─────────────────────┴───────────┴──────────┴──────┘ +``` + +``` sql +SELECT + UserID, + sum(PageViews) AS PageViews, + sum(Duration) AS Duration +FROM UAct +GROUP BY UserID +```text +┌──────────────UserID─┬─PageViews─┬─Duration─┐ +│ 4324182021466249494 │ 6 │ 185 │ +└─────────────────────┴───────────┴──────────┘ +``` + +``` sqk +select count() FROM UAct +``` + +``` text +┌─count()─┐ +│ 3 │ +└─────────┘ +``` + +``` sql +optimize table UAct final; + +select * FROM UAct +``` + +``` text +┌──────────────UserID─┬─PageViews─┬─Duration─┬─Sign─┐ +│ 4324182021466249494 │ 6 │ 185 │ 1 │ +└─────────────────────┴───────────┴──────────┴──────┘ +``` + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/collapsingmergetree/) diff --git a/docs/fr/operations/table_engines/custom_partitioning_key.md b/docs/fr/operations/table_engines/custom_partitioning_key.md new file mode 100644 index 00000000000..cd850f3595c --- /dev/null +++ b/docs/fr/operations/table_engines/custom_partitioning_key.md @@ -0,0 +1,124 @@ +--- +machine_translated: true +--- + +# Clé De Partitionnement Personnalisée {#custom-partitioning-key} + +Le partitionnement est disponible pour [MergeTree](mergetree.md) table de famille (y compris les [répliqué](replication.md) table). [Les vues matérialisées](materializedview.md) basé sur les tables MergeTree prennent également en charge le partitionnement. + +Une partition est une combinaison logique d'enregistrements dans une table selon un critère spécifié. Vous pouvez définir une partition par un critère arbitraire, comme, par mois, par jour, ou par type d'événement. Chaque partition est stockée séparément pour simplifier les manipulations de ces données. Lors de l'accès aux données, ClickHouse utilise le plus petit sous-ensemble de partitions possible. + +La partition est spécifiée dans le `PARTITION BY expr` clause lors de [création d'une table](mergetree.md#table_engine-mergetree-creating-a-table). La clé de partition peut être n'importe quelle expression des colonnes de la table. Par exemple, pour spécifier le partitionnement par mois, utilisez l'expression `toYYYYMM(date_column)`: + +``` sql +CREATE TABLE visits +( + VisitDate Date, + Hour UInt8, + ClientID UUID +) +ENGINE = MergeTree() +PARTITION BY toYYYYMM(VisitDate) +ORDER BY Hour; +``` + +La clé de partition peut également être un tuple d'expressions (similaire à la [clé primaire](mergetree.md#primary-keys-and-indexes-in-queries)). Exemple: + +``` sql +ENGINE = ReplicatedCollapsingMergeTree('/clickhouse/tables/name', 'replica1', Sign) +PARTITION BY (toMonday(StartDate), EventType) +ORDER BY (CounterID, StartDate, intHash32(UserID)); +``` + +Dans cet exemple, nous définissons le partitionnement par les types d'événements qui se sont produits au cours de la semaine en cours. + +Lors de l'insertion de nouvelles données dans une table, ces données sont stockées en tant que partie séparée (bloc) triée par la clé primaire. Dans 10-15 minutes après l'insertion, les parties de la même partition sont fusionnées dans la partie entière. + +!!! info "Info" + Une fusion ne fonctionne que pour les parties de données qui ont la même valeur pour l'expression de partitionnement. Cela signifie **vous ne devriez pas faire des partitions trop granulaires** (plus d'un millier de partitions). Sinon, l' `SELECT` la requête fonctionne mal en raison d'un nombre déraisonnablement élevé de fichiers dans le système de fichiers et des descripteurs de fichiers ouverts. + +L'utilisation de la [système.partie](../system_tables.md#system_tables-parts) table pour afficher les parties et les partitions de la table. Par exemple, supposons que nous avons une `visits` table avec partitionnement par mois. Nous allons effectuer le `SELECT` la requête pour l' `system.parts` table: + +``` sql +SELECT + partition, + name, + active +FROM system.parts +WHERE table = 'visits' +``` + +``` text +┌─partition─┬─name───────────┬─active─┐ +│ 201901 │ 201901_1_3_1 │ 0 │ +│ 201901 │ 201901_1_9_2 │ 1 │ +│ 201901 │ 201901_8_8_0 │ 0 │ +│ 201901 │ 201901_9_9_0 │ 0 │ +│ 201902 │ 201902_4_6_1 │ 1 │ +│ 201902 │ 201902_10_10_0 │ 1 │ +│ 201902 │ 201902_11_11_0 │ 1 │ +└───────────┴────────────────┴────────┘ +``` + +Le `partition` colonne contient les noms des partitions. Il y a deux partitions dans cet exemple: `201901` et `201902`. Vous pouvez utiliser cette valeur de colonne pour spécifier le nom de [ALTER … PARTITION](#alter_manipulations-with-partitions) requête. + +Le `name` colonne contient les noms des parties de données de partition. Vous pouvez utiliser cette colonne pour spécifier le nom de la partie dans la [ALTER ATTACH PART](#alter_attach-partition) requête. + +Décomposons le nom de la première partie: `201901_1_3_1`: + +- `201901` est le nom de la partition. +- `1` est le nombre minimum du bloc de données. +- `3` est le nombre maximal de blocs de données. +- `1` est le niveau de bloc (la profondeur de l'arbre de fusion à partir duquel il est formé). + +!!! info "Info" + Les parties des tables de type ancien ont le nom: `20190117_20190123_2_2_0` (date minimale - date maximale - numéro de bloc minimum - numéro de bloc maximum-niveau). + +Le `active` colonne indique le statut de la partie. `1` est active; `0` est inactif. Les parties inactives sont, par exemple, des parties source restant après la fusion à une partie plus grande. Les parties de données corrompues sont également indiquées comme inactives. + +Comme vous pouvez le voir dans l'exemple, il y a plusieurs parties séparées de la même partition (par exemple, `201901_1_3_1` et `201901_1_9_2`). Cela signifie que ces parties ne sont pas encore fusionnées. Clickhouse fusionne les parties insérées des données périodiquement, environ 15 minutes après l'insertion. En outre, vous pouvez effectuer une fusion non planifiée en utilisant [OPTIMIZE](../../query_language/misc.md#misc_operations-optimize) requête. Exemple: + +``` sql +OPTIMIZE TABLE visits PARTITION 201902; +``` + +``` text +┌─partition─┬─name───────────┬─active─┐ +│ 201901 │ 201901_1_3_1 │ 0 │ +│ 201901 │ 201901_1_9_2 │ 1 │ +│ 201901 │ 201901_8_8_0 │ 0 │ +│ 201901 │ 201901_9_9_0 │ 0 │ +│ 201902 │ 201902_4_6_1 │ 0 │ +│ 201902 │ 201902_4_11_2 │ 1 │ +│ 201902 │ 201902_10_10_0 │ 0 │ +│ 201902 │ 201902_11_11_0 │ 0 │ +└───────────┴────────────────┴────────┘ +``` + +Les parties inactives seront supprimées environ 10 minutes après la fusion. + +Une autre façon d'afficher un ensemble de pièces et de partitions est d'aller dans le répertoire de la table: `/var/lib/clickhouse/data///`. Exemple: + +``` bash +/var/lib/clickhouse/data/default/visits$ ls -l +total 40 +drwxr-xr-x 2 clickhouse clickhouse 4096 Feb 1 16:48 201901_1_3_1 +drwxr-xr-x 2 clickhouse clickhouse 4096 Feb 5 16:17 201901_1_9_2 +drwxr-xr-x 2 clickhouse clickhouse 4096 Feb 5 15:52 201901_8_8_0 +drwxr-xr-x 2 clickhouse clickhouse 4096 Feb 5 15:52 201901_9_9_0 +drwxr-xr-x 2 clickhouse clickhouse 4096 Feb 5 16:17 201902_10_10_0 +drwxr-xr-x 2 clickhouse clickhouse 4096 Feb 5 16:17 201902_11_11_0 +drwxr-xr-x 2 clickhouse clickhouse 4096 Feb 5 16:19 201902_4_11_2 +drwxr-xr-x 2 clickhouse clickhouse 4096 Feb 5 12:09 201902_4_6_1 +drwxr-xr-x 2 clickhouse clickhouse 4096 Feb 1 16:48 detached +``` + +Dossier ‘201901\_1\_1\_0’, ‘201901\_1\_7\_1’ et ainsi de suite sont les répertoires des parties. Chaque partie se rapporte à une partition correspondante et contient des données juste pour un certain mois (la table dans cet exemple a partitionnement par mois). + +Le `detached` le répertoire contient des parties qui ont été détachées de la table à l'aide [DETACH](#alter_detach-partition) requête. Les parties corrompues sont également déplacées dans ce répertoire, au lieu d'être supprimées. Le serveur n'utilise pas les pièces de la `detached` directory. You can add, delete, or modify the data in this directory at any time – the server will not know about this until you run the [ATTACH](../../query_language/alter.md#alter_attach-partition) requête. + +Notez que sur le serveur d'exploitation, vous ne pouvez pas modifier manuellement l'ensemble de pièces ou leurs données sur le système de fichiers, car le serveur ne le saura pas. Pour les tables non répliquées, vous pouvez le faire lorsque le serveur est arrêté, mais ce n'est pas recommandé. Pour les tables répliquées, l'ensemble de pièces ne peut en aucun cas être modifié. + +ClickHouse vous permet d'effectuer des opérations avec les partitions: les supprimer, copier d'une table à une autre, ou créer une sauvegarde. Voir la liste de toutes les opérations de la section [Manipulations avec des Partitions et des pièces](../../query_language/alter.md#alter_manipulations-with-partitions). + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/custom_partitioning_key/) diff --git a/docs/fr/operations/table_engines/dictionary.md b/docs/fr/operations/table_engines/dictionary.md new file mode 100644 index 00000000000..6a517449863 --- /dev/null +++ b/docs/fr/operations/table_engines/dictionary.md @@ -0,0 +1,94 @@ +--- +machine_translated: true +--- + +# Dictionnaire {#dictionary} + +Le `Dictionary` le moteur affiche le [dictionnaire](../../query_language/dicts/external_dicts.md) données comme une table ClickHouse. + +À titre d'exemple, considérons un dictionnaire de `products` avec la configuration suivante: + +``` xml + + + products + + +
products
+ DSN=some-db-server + + + + 300 + 360 + + + + + + + product_id + + + title + String + + + + + +``` + +Interroger les données du dictionnaire: + +``` sql +SELECT + name, + type, + key, + attribute.names, + attribute.types, + bytes_allocated, + element_count, + source +FROM system.dictionaries +WHERE name = 'products' +``` + +``` text +┌─name─────┬─type─┬─key────┬─attribute.names─┬─attribute.types─┬─bytes_allocated─┬─element_count─┬─source──────────┐ +│ products │ Flat │ UInt64 │ ['title'] │ ['String'] │ 23065376 │ 175032 │ ODBC: .products │ +└──────────┴──────┴────────┴─────────────────┴─────────────────┴─────────────────┴───────────────┴─────────────────┘ +``` + +Vous pouvez utiliser l' [dictGet\*](../../query_language/functions/ext_dict_functions.md#ext_dict_functions) fonction pour obtenir les données du dictionnaire dans ce format. + +Cette vue n'est pas utile lorsque vous avez besoin d'obtenir des données brutes ou `JOIN` opération. Pour ces cas, vous pouvez utiliser le `Dictionary` moteur, qui affiche les données du dictionnaire dans une table. + +Syntaxe: + +``` sql +CREATE TABLE %table_name% (%fields%) engine = Dictionary(%dictionary_name%)` +``` + +Exemple d'utilisation: + +``` sql +create table products (product_id UInt64, title String) Engine = Dictionary(products); +``` + + Ok + +Jetez un oeil à ce qui est dans le tableau. + +``` sql +select * from products limit 1; +``` + +``` text +┌────product_id─┬─title───────────┐ +│ 152689 │ Some item │ +└───────────────┴─────────────────┘ +``` + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/dictionary/) diff --git a/docs/fr/operations/table_engines/distributed.md b/docs/fr/operations/table_engines/distributed.md new file mode 100644 index 00000000000..60eecc8481b --- /dev/null +++ b/docs/fr/operations/table_engines/distributed.md @@ -0,0 +1,151 @@ +--- +machine_translated: true +--- + +# Distribué {#distributed} + +**Les Tables avec moteur distribué ne stockent aucune donnée par elles mêmes**, mais autoriser le traitement des requêtes distribuées sur plusieurs serveurs. +La lecture est automatiquement parallélisée. Lors d'une lecture, les index de table sur les serveurs distants sont utilisés, s'il y en a. + +Le moteur distribué accepte les paramètres: + +- le nom du cluster dans le fichier de configuration du serveur + +- le nom d'une base de données distante + +- le nom d'une table distante + +- (en option) sharding clé + +- (éventuellement) nom de la stratégie, il sera utilisé pour stocker des fichiers temporaires pour l'envoi asynchrone + + Voir aussi: + + - `insert_distributed_sync` paramètre + - [MergeTree](mergetree.md#table_engine-mergetree-multiple-volumes) pour les exemples + +Exemple: + +``` sql +Distributed(logs, default, hits[, sharding_key[, policy_name]]) +``` + +Les données seront lues à partir de tous les serveurs ‘logs’ cluster, à partir de la valeur par défaut.hits table située sur chaque serveur du cluster. +Les données ne sont pas seulement lues mais sont partiellement traitées sur les serveurs distants (dans la mesure du possible). +Par exemple, pour une requête avec GROUP BY, les données seront agrégées sur des serveurs distants et les états intermédiaires des fonctions d'agrégation seront envoyés au serveur demandeur. Ensuite, les données seront plus agrégées. + +Au lieu du nom de la base de données, vous pouvez utiliser une expression constante qui renvoie une chaîne. Par exemple: currentDatabase(). + +logs – The cluster name in the server's config file. + +Les Clusters sont définis comme ceci: + +``` xml + + + + + 1 + + false + + example01-01-1 + 9000 + + + example01-01-2 + 9000 + + + + 2 + false + + example01-02-1 + 9000 + + + example01-02-2 + 1 + 9440 + + + + +``` + +Ici un cluster est défini avec le nom ‘logs’ qui se compose de deux fragments, dont chacune contient deux répliques. +Les partitions se réfèrent aux serveurs qui contiennent différentes parties des données (pour lire toutes les données, vous devez accéder à tous les partitions). +Les répliques sont des serveurs de duplication (afin de lire toutes les données, vous pouvez accéder aux données sur l'une des répliques). + +Les noms de Cluster ne doivent pas contenir de points. + +Paramètre `host`, `port` et , éventuellement, `user`, `password`, `secure`, `compression` sont spécifiés pour chaque serveur: +- `host` – The address of the remote server. You can use either the domain or the IPv4 or IPv6 address. If you specify the domain, the server makes a DNS request when it starts, and the result is stored as long as the server is running. If the DNS request fails, the server doesn't start. If you change the DNS record, restart the server. +- `port` – The TCP port for messenger activity (‘tcp\_port’ dans la configuration, généralement définie sur 9000). Ne le confondez pas avec http\_port. +- `user` – Name of the user for connecting to a remote server. Default value: default. This user must have access to connect to the specified server. Access is configured in the users.xml file. For more information, see the section [Les droits d'accès](../../operations/access_rights.md). +- `password` – The password for connecting to a remote server (not masked). Default value: empty string. +- `secure` - Utilisez ssl pour la connexion, généralement vous devez également définir `port` = 9440. Le serveur doit écouter 9440 et avoir des certificats corrects. +- `compression` - Utiliser la compression de données. Valeur par défaut: true. + +When specifying replicas, one of the available replicas will be selected for each of the shards when reading. You can configure the algorithm for load balancing (the preference for which replica to access) – see the [équilibrage](../settings/settings.md#settings-load_balancing) paramètre. +Si la connexion avec le serveur n'est pas établie, il y aura une tentative de connexion avec un court délai. Si la connexion échoue, la réplique suivante sera sélectionnée, et ainsi de suite pour toutes les répliques. Si la tentative de connexion a échoué pour toutes les répliques, la tentative sera répété de la même façon, plusieurs fois. +Cela fonctionne en faveur de la résilience, mais ne fournit pas de tolérance aux pannes complète: un serveur distant peut accepter la connexion, mais peut ne pas fonctionner ou fonctionner mal. + +Vous pouvez spécifier un seul des fragments (dans ce cas, le traitement de la requête doit être appelé distant, plutôt que distribué) ou jusqu'à un nombre quelconque de fragments. Dans chaque fragment, vous pouvez spécifier un nombre de répliques. Vous pouvez spécifier un nombre différent de répliques pour chaque fragment. + +Vous pouvez spécifier autant de clusters que vous souhaitez dans la configuration. + +Pour afficher vos clusters, utilisez ‘system.clusters’ table. + +Le moteur distribué permet de travailler avec un cluster comme un serveur local. Cependant, le cluster est inextensible: vous devez écrire sa configuration dans le fichier de configuration du serveur (encore mieux, pour tous les serveurs du cluster). + +Il n'y a pas de support pour les tables distribuées qui regardent d'autres tables distribuées (sauf dans les cas où une table distribuée n'a qu'un seul fragment). Comme alternative, faites en sorte que la table distribuée regarde le “final” table. + +The Distributed engine requires writing clusters to the config file. Clusters from the config file are updated on the fly, without restarting the server. If you need to send a query to an unknown set of shards and replicas each time, you don't need to create a Distributed table – use the ‘remote’ fonction de table à la place. Voir la section [Les fonctions de Table](../../query_language/table_functions/index.md). + +Il existe deux méthodes pour écrire des données dans un cluster: + +Tout d'abord, vous pouvez définir les serveurs d'écrire les données à et effectuer l'écriture directement sur chaque fragment. En d'autres termes, effectuez INSERT dans les tables que la table distribuée “looks at”. C'est la solution la plus flexible car vous pouvez utiliser n'importe quel schéma de sharding, qui pourrait être non trivial en raison des exigences du sujet. C'est également la solution la plus optimale puisque les données peuvent être écrites sur différents fragments de manière complètement indépendante. + +Deuxièmement, vous pouvez effectuer INSERT dans une table distribuée. Dans ce cas, la table distribuera les données insérées sur les serveurs eux-mêmes. Pour écrire dans une table distribuée, elle doit avoir un jeu de clés de sharding (le dernier paramètre). De plus, s'il n'y a qu'un seul fragment, l'opération d'écriture fonctionne sans spécifier la clé de sharding, car cela ne signifie rien dans ce cas. + +Chaque fragment peut avoir un poids défini dans le fichier de configuration. Par défaut, le poids est égal à un. Les données sont réparties entre les fragments dans la quantité proportionnelle au poids des fragments. Par exemple, si il y a deux tessons et le premier a un poids de 9 tandis que la seconde a un poids de 10, le premier sera envoyé 9 / 19 parties de lignes, et le second sera envoyé 10 / 19. + +Chaque fragment peut avoir le ‘internal\_replication’ paramètre défini dans le fichier de configuration. + +Si ce paramètre est défini à ‘true’, l'opération d'écriture sélectionne le premier saine réplique et écrit les données. Utilisez cette option si le tableau Distribué “looks at” tables répliquées. En d'autres termes, si la table où les données seront écrites va répliquer elle-même. + +Si elle est définie sur ‘false’ (par défaut), les données sont écrites dans toutes les répliques. En substance, cela signifie que la table distribuée réplique les données elle-même. C'est pire que d'utiliser des tables répliquées, car la cohérence des répliques n'est pas vérifiée et, au fil du temps, elles contiendront des données légèrement différentes. + +Pour sélectionner le fragment auquel une ligne de données est envoyée, l'expression de sharding est analysée et son reste est extrait de la diviser par le poids total des fragments. La ligne est envoyée au fragment qui correspond au demi-intervalle des restes de ‘prev\_weight’ de ‘prev\_weights + weight’, où ‘prev\_weights’ c'est le poids total des tessons avec le plus petit nombre, et ‘weight’ est le poids de cet éclat. Par exemple, s'il y a deux fragments, et que le premier a un poids de 9 tandis que le second a un poids de 10, la ligne sera envoyée au premier fragment pour les restes de la plage \[0, 9), et au second pour les restes de la plage \[9, 19). + +L'expression de sharding peut être n'importe quelle expression de constantes et de colonnes de table qui renvoie un entier. Par exemple, vous pouvez utiliser l'expression ‘rand()’ pour la distribution aléatoire des données, ou ‘UserID’ pour la distribution par le reste de la division de L'ID de l'utilisateur (alors les données d'un seul utilisateur résideront sur un seul fragment, ce qui simplifie l'exécution et la jointure par les utilisateurs). Si l'une des colonnes n'est pas assez répartie uniformément, vous pouvez l'envelopper dans une fonction de hachage: intHash64 (UserID). + +Un simple rappel de la division est une solution limitée pour le sharding et n'est pas toujours approprié. Cela fonctionne pour des volumes de données moyens et importants (des dizaines de serveurs), mais pas pour des volumes de données très importants (des centaines de serveurs ou plus). Dans ce dernier cas, utilisez le schéma de répartition requis par le domaine, plutôt que d'utiliser des entrées dans des tableaux distribués. + +SELECT queries are sent to all the shards and work regardless of how data is distributed across the shards (they can be distributed completely randomly). When you add a new shard, you don't have to transfer the old data to it. You can write new data with a heavier weight – the data will be distributed slightly unevenly, but queries will work correctly and efficiently. + +Vous devriez être préoccupé par le système de sharding dans les cas suivants: + +- Les requêtes sont utilisées qui nécessitent des données de jointure (IN ou JOIN) par une clé spécifique. Si les données sont partagées par cette clé, vous pouvez utiliser local in ou JOIN au lieu de GLOBAL IN ou global JOIN, ce qui est beaucoup plus efficace. +- Un grand nombre de serveurs est utilisé (des centaines ou plus) avec un grand nombre de petites requêtes (requêtes de clients individuels - sites Web, annonceurs ou partenaires). Pour que les petites requêtes n'affectent pas l'ensemble du cluster, il est logique de localiser les données d'un seul client sur un seul fragment. Alternativement, comme nous l'avons fait dans Yandex.Metrica, vous pouvez configurer le sharding à deux niveaux: divisez le cluster entier en “layers”, où une couche peut être constituée de plusieurs éclats. Les données d'un seul client sont situées sur une seule couche, mais des fragments peuvent être ajoutés à une couche si nécessaire, et les données sont distribuées aléatoirement à l'intérieur de celles-ci. Des tables distribuées sont créées pour chaque couche et une seule table distribuée partagée est créée pour les requêtes globales. + +Les données sont écrites de manière asynchrone. Lorsqu'il est inséré dans la table, le bloc de données est simplement écrit dans le système de fichiers local. Les données sont envoyées aux serveurs distants en arrière-plan dès que possible. La période d'envoi des données est gérée par [distributed\_directory\_monitor\_sleep\_time\_ms](../settings/settings.md#distributed_directory_monitor_sleep_time_ms) et [distributed\_directory\_monitor\_max\_sleep\_time\_ms](../settings/settings.md#distributed_directory_monitor_max_sleep_time_ms) paramètre. Le `Distributed` moteur envoie chaque fichier de données insérées séparément, mais vous pouvez activer le lot envoi de fichiers avec l' [distributed\_directory\_monitor\_batch\_inserts](../settings/settings.md#distributed_directory_monitor_batch_inserts) paramètre. Ce paramètre améliore les performances du cluster en utilisant mieux les ressources réseau et serveur local. Vous devriez vérifier si les données sont envoyées avec succès en vérifiant la liste des fichiers (données en attente d'envoi) dans le répertoire de la table: `/var/lib/clickhouse/data/database/table/`. + +Si le serveur a cessé d'exister ou a subi un redémarrage Brutal (par exemple, après une panne de périphérique) après une insertion dans une table distribuée, les données insérées peuvent être perdues. Si une partie de données endommagée est détectée dans le répertoire de la table, elle est transférée ‘broken’ sous-répertoire et n'est plus utilisé. + +Lorsque l'option max\_parallel\_replicas est activée, le traitement des requêtes est parallélisé entre toutes les répliques d'un seul fragment. Pour plus d'informations, consultez la section [max\_parallel\_replicas](../settings/settings.md#settings-max_parallel_replicas). + +## Les Colonnes Virtuelles {#virtual-columns} + +- `_shard_num` — Contains the `shard_num` (de `system.clusters`). Type: [UInt32](../../data_types/int_uint.md). + +!!! note "Note" + Depuis [`remote`](../../query_language/table_functions/remote.md)/`cluster` les fonctions de table créent en interne une instance temporaire du même moteur distribué, `_shard_num` est disponible là-bas aussi. + +**Voir Aussi** + +- [Les colonnes virtuelles](index.md#table_engines-virtual_columns) + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/distributed/) diff --git a/docs/fr/operations/table_engines/external_data.md b/docs/fr/operations/table_engines/external_data.md new file mode 100644 index 00000000000..79b3b32076b --- /dev/null +++ b/docs/fr/operations/table_engines/external_data.md @@ -0,0 +1,65 @@ +--- +machine_translated: true +--- + +# Données externes pour le traitement des requêtes {#external-data-for-query-processing} + +ClickHouse permet d'Envoyer à un serveur les données nécessaires au traitement d'une requête, ainsi qu'une requête SELECT. Ces données sont placées dans une table temporaire (voir la section “Temporary tables”) et peut être utilisé dans la requête (par exemple, dans les DANS les opérateurs). + +Par exemple, si vous disposez d'un fichier texte avec important des identifiants d'utilisateur, vous pouvez le télécharger sur le serveur avec une requête qui utilise la filtration par cette liste. + +Si vous devez exécuter plusieurs requêtes avec un volume important de données externes, n'utilisez pas cette fonctionnalité. Il est préférable de télécharger les données sur la base de données à l'avance. + +Les données externes peuvent être téléchargées à l'aide du client de ligne de commande (en mode non interactif) ou à l'aide de L'interface HTTP. + +Dans le client de ligne de commande, vous pouvez spécifier une section paramètres du format + +``` bash +--external --file=... [--name=...] [--format=...] [--types=...|--structure=...] +``` + +Vous pouvez avoir plusieurs sections comme ça, pour le nombre de tables étant transmis. + +**–external** – Marks the beginning of a clause. +**–file** – Path to the file with the table dump, or -, which refers to stdin. +Une seule table peut être récupérée à partir de stdin. + +Les paramètres suivants sont facultatifs: **–name**– Name of the table. If omitted, \_data is used. +**–format** – Data format in the file. If omitted, TabSeparated is used. + +L'un des paramètres suivants est requis:**–types** – A list of comma-separated column types. For example: `UInt64,String`. The columns will be named \_1, \_2, … +**–structure**– The table structure in the format`UserID UInt64`, `URL String`. Définit les noms et les types de colonnes. + +Les fichiers spécifiés dans ‘file’ sera analysé par le format spécifié dans ‘format’, en utilisant les types de données spécifié dans ‘types’ ou ‘structure’. La table sera téléchargée sur le serveur et accessible en tant que table temporaire avec le nom dans ‘name’. + +Exemple: + +``` bash +$ echo -ne "1\n2\n3\n" | clickhouse-client --query="SELECT count() FROM test.visits WHERE TraficSourceID IN _data" --external --file=- --types=Int8 +849897 +$ cat /etc/passwd | sed 's/:/\t/g' | clickhouse-client --query="SELECT shell, count() AS c FROM passwd GROUP BY shell ORDER BY c DESC" --external --file=- --name=passwd --structure='login String, unused String, uid UInt16, gid UInt16, comment String, home String, shell String' +/bin/sh 20 +/bin/false 5 +/bin/bash 4 +/usr/sbin/nologin 1 +/bin/sync 1 +``` + +Lors de l'utilisation de L'interface HTTP, les données externes sont transmises au format multipart/form-data. Chaque tableau est transmis en tant que fichier séparé. Le nom de la table est tiré du nom du fichier. Le ‘query\_string’ est passé les paramètres ‘name\_format’, ‘name\_types’, et ‘name\_structure’, où ‘name’ est le nom de la table que ces paramètres correspondent. La signification des paramètres est la même que lors de l'utilisation du client de ligne de commande. + +Exemple: + +``` bash +$ cat /etc/passwd | sed 's/:/\t/g' > passwd.tsv + +$ curl -F 'passwd=@passwd.tsv;' 'http://localhost:8123/?query=SELECT+shell,+count()+AS+c+FROM+passwd+GROUP+BY+shell+ORDER+BY+c+DESC&passwd_structure=login+String,+unused+String,+uid+UInt16,+gid+UInt16,+comment+String,+home+String,+shell+String' +/bin/sh 20 +/bin/false 5 +/bin/bash 4 +/usr/sbin/nologin 1 +/bin/sync 1 +``` + +Pour le traitement des requêtes distribuées, les tables temporaires sont envoyées à tous les serveurs distants. + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/external_data/) diff --git a/docs/fr/operations/table_engines/file.md b/docs/fr/operations/table_engines/file.md new file mode 100644 index 00000000000..8b2f0ada797 --- /dev/null +++ b/docs/fr/operations/table_engines/file.md @@ -0,0 +1,87 @@ +--- +machine_translated: true +--- + +# Fichier {#table_engines-file} + +Le moteur de table de fichiers conserve les données dans un fichier dans l'un des [fichier +format](../../interfaces/formats.md#formats) (TabSeparated, Native, etc.). + +Exemples d'utilisation: + +- Exportation de données de ClickHouse vers un fichier. +- Convertir des données d'un format à un autre. +- Mise à jour des données dans ClickHouse via l'édition d'un fichier sur un disque. + +## Utilisation dans le serveur ClickHouse {#usage-in-clickhouse-server} + +``` sql +File(Format) +``` + +Le `Format` paramètre spécifie l'un des formats de fichier disponibles. Effectuer +`SELECT` requêtes, le format doit être pris en charge pour l'entrée, et à effectuer +`INSERT` queries – for output. The available formats are listed in the +[Format](../../interfaces/formats.md#formats) section. + +ClickHouse ne permet pas de spécifier le chemin du système de fichiers pour`File`. Il utilisera le dossier défini par [chemin](../server_settings/settings.md) réglage dans la configuration du serveur. + +Lors de la création de la table en utilisant `File(Format)` il crée sous-répertoire vide dans ce dossier. Lorsque les données sont écrites dans cette table, elles sont mises dans `data.Format` fichier dans ce répertoire. + +Vous pouvez créer manuellement ce sous dossier et ce fichier dans le système de fichiers [ATTACH](../../query_language/misc.md) il à la table des informations avec le nom correspondant, de sorte que vous pouvez interroger les données de ce fichier. + +!!! warning "Avertissement" + Soyez prudent avec cette fonctionnalité, car ClickHouse ne garde pas trace des modifications externes apportées à ces fichiers. Le résultat des Écritures simultanées via ClickHouse et en dehors de ClickHouse n'est pas défini. + +**Exemple:** + +**1.** Configurer le `file_engine_table` table: + +``` sql +CREATE TABLE file_engine_table (name String, value UInt32) ENGINE=File(TabSeparated) +``` + +Par défaut ClickHouse va créer un dossier `/var/lib/clickhouse/data/default/file_engine_table`. + +**2.** Créer manuellement `/var/lib/clickhouse/data/default/file_engine_table/data.TabSeparated` contenant: + +``` bash +$ cat data.TabSeparated +one 1 +two 2 +``` + +**3.** Interroger les données: + +``` sql +SELECT * FROM file_engine_table +``` + +``` text +┌─name─┬─value─┐ +│ one │ 1 │ +│ two │ 2 │ +└──────┴───────┘ +``` + +## Utilisation dans Clickhouse-local {#usage-in-clickhouse-local} + +Dans [clickhouse-local](../utils/clickhouse-local.md) Fichier moteur accepte chemin d'accès au fichier en plus `Format`. Les flux d'entrée / sortie par défaut peuvent être spécifiés en utilisant des noms numériques ou lisibles par l'homme comme `0` ou `stdin`, `1` ou `stdout`. +**Exemple:** + +``` bash +$ echo -e "1,2\n3,4" | clickhouse-local -q "CREATE TABLE table (a Int64, b Int64) ENGINE = File(CSV, stdin); SELECT a, b FROM table; DROP TABLE table" +``` + +## Les détails de mise en Œuvre {#details-of-implementation} + +- Plusieurs `SELECT` les requêtes peuvent être effectuées simultanément, mais `INSERT` requêtes s'attendre les uns les autres. +- Prise en charge de la création d'un nouveau fichier par `INSERT` requête. +- Si le fichier existe, `INSERT` ajouterait de nouvelles valeurs dedans. +- Pas pris en charge: + - `ALTER` + - `SELECT ... SAMPLE` + - Index + - Réplication + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/file/) diff --git a/docs/fr/operations/table_engines/generate.md b/docs/fr/operations/table_engines/generate.md new file mode 100644 index 00000000000..4b418f39734 --- /dev/null +++ b/docs/fr/operations/table_engines/generate.md @@ -0,0 +1,58 @@ +--- +machine_translated: true +--- + +# GenerateRandom {#table_engines-generate} + +Le moteur de table GenerateRandom produit des données aléatoires pour un schéma de table donné. + +Exemples d'utilisation: + +- Utiliser dans le test pour remplir une grande table reproductible. +- Générer une entrée aléatoire pour les tests de fuzzing. + +## Utilisation dans le serveur ClickHouse {#usage-in-clickhouse-server} + +``` sql +ENGINE = GenerateRandom(random_seed, max_string_length, max_array_length) +``` + +Le `max_array_length` et `max_string_length` les paramètres spécifient la longueur maximale de tous +colonnes et chaînes de tableau en conséquence dans les données générées. + +Générer le moteur de table prend en charge uniquement `SELECT` requête. + +Il prend en charge tous les [Les types de données](../../data_types/index.md) cela peut être stocké dans une table sauf `LowCardinality` et `AggregateFunction`. + +**Exemple:** + +**1.** Configurer le `generate_engine_table` table: + +``` sql +CREATE TABLE generate_engine_table (name String, value UInt32) ENGINE = GenerateRandom(1, 5, 3) +``` + +**2.** Interroger les données: + +``` sql +SELECT * FROM generate_engine_table LIMIT 3 +``` + +``` text +┌─name─┬──────value─┐ +│ c4xJ │ 1412771199 │ +│ r │ 1791099446 │ +│ 7#$ │ 124312908 │ +└──────┴────────────┘ +``` + +## Les détails de mise en Œuvre {#details-of-implementation} + +- Pas pris en charge: + - `ALTER` + - `SELECT ... SAMPLE` + - `INSERT` + - Index + - Réplication + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/generate/) diff --git a/docs/fr/operations/table_engines/graphitemergetree.md b/docs/fr/operations/table_engines/graphitemergetree.md new file mode 100644 index 00000000000..584bb5acd5c --- /dev/null +++ b/docs/fr/operations/table_engines/graphitemergetree.md @@ -0,0 +1,171 @@ +--- +machine_translated: true +--- + +# GraphiteMergeTree {#graphitemergetree} + +Ce moteur est conçu pour l'amincissement et l'agrégation / moyenne (cumul) [Graphite](http://graphite.readthedocs.io/en/latest/index.html) données. Il peut être utile aux développeurs qui veulent utiliser ClickHouse comme un magasin de données pour Graphite. + +Vous pouvez utiliser N'importe quel moteur de table ClickHouse pour stocker les données Graphite si vous n'avez pas besoin de cumul, mais si vous avez besoin d'un cumul, utilisez `GraphiteMergeTree`. Le moteur réduit le volume de stockage et augmente l'efficacité des requêtes de Graphite. + +Le moteur hérite des propriétés de [MergeTree](mergetree.md). + +## Création d'une Table {#creating-table} + +``` sql +CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] +( + Path String, + Time DateTime, + Value , + Version + ... +) ENGINE = GraphiteMergeTree(config_section) +[PARTITION BY expr] +[ORDER BY expr] +[SAMPLE BY expr] +[SETTINGS name=value, ...] +``` + +Voir une description détaillée de la [CREATE TABLE](../../query_language/create.md#create-table-query) requête. + +Un tableau pour les données de Graphite devrait avoir les colonnes suivantes pour les données suivantes: + +- Nom métrique (Capteur De Graphite). Type de données: `String`. + +- Temps de mesure de la métrique. Type de données: `DateTime`. + +- La valeur de la métrique. Type de données: tout numérique. + +- La Version de la métrique. Type de données: tout numérique. + + ClickHouse enregistre les lignes avec la version la plus élevée ou la dernière écrite si les versions sont les mêmes. Les autres lignes sont supprimées lors de la fusion des parties de données. + +Les noms de ces colonnes doivent être définis dans la configuration de cumul. + +**GraphiteMergeTree paramètres** + +- `config_section` — Name of the section in the configuration file, where are the rules of rollup set. + +**Les clauses de requête** + +Lors de la création d'un `GraphiteMergeTree` de table, de la même [clause](mergetree.md#table_engine-mergetree-creating-a-table) sont nécessaires, comme lors de la création d'un `MergeTree` table. + +
+ +Méthode obsolète pour créer une Table + +!!! attention "Attention" + N'utilisez pas cette méthode dans les nouveaux projets et, si possible, remplacez les anciens projets par la méthode décrite ci-dessus. + +``` sql +CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] +( + EventDate Date, + Path String, + Time DateTime, + Value , + Version + ... +) ENGINE [=] GraphiteMergeTree(date-column [, sampling_expression], (primary, key), index_granularity, config_section) +``` + +Tous les paramètres excepté `config_section` ont la même signification que dans `MergeTree`. + +- `config_section` — Name of the section in the configuration file, where are the rules of rollup set. + +
+ +## Configuration de cumul {#rollup-configuration} + +Les paramètres de cumul sont définis par [graphite\_rollup](../server_settings/settings.md#server_settings-graphite_rollup) paramètre dans la configuration du serveur. Le nom du paramètre pourrait être tout. Vous pouvez créer plusieurs configurations et les utiliser pour différentes tables. + +Structure de configuration de cumul: + + required-columns + patterns + +### Les Colonnes Requises {#required-columns} + +- `path_column_name` — The name of the column storing the metric name (Graphite sensor). Default value: `Path`. +- `time_column_name` — The name of the column storing the time of measuring the metric. Default value: `Time`. +- `value_column_name` — The name of the column storing the value of the metric at the time set in `time_column_name`. Valeur par défaut: `Value`. +- `version_column_name` — The name of the column storing the version of the metric. Default value: `Timestamp`. + +### Modèle {#patterns} + +La Structure de la `patterns` section: + +``` text +pattern + regexp + function +pattern + regexp + age + precision + ... +pattern + regexp + function + age + precision + ... +pattern + ... +default + function + age + precision + ... +``` + +!!! warning "Attention" + Les motifs doivent être strictement commandés: + + 1. Patterns without `function` or `retention`. + 1. Patterns with both `function` and `retention`. + 1. Pattern `default`. + +Lors du traitement d'une ligne, ClickHouse vérifie les règles `pattern` section. Chacun `pattern` (comprendre `default`) les articles peuvent contenir des `function` paramètre d'agrégation, `retention` les paramètres ou les deux à la fois. Si le nom de la métrique correspond `regexp` les règles de la `pattern` section (ou sections) sont appliquées; sinon, les règles de la `default` section sont utilisés. + +Champs pour `pattern` et `default` section: + +- `regexp`– A pattern for the metric name. +- `age` – The minimum age of the data in seconds. +- `precision`– How precisely to define the age of the data in seconds. Should be a divisor for 86400 (seconds in a day). +- `function` – The name of the aggregating function to apply to data whose age falls within the range `[age, age + precision]`. + +### Exemple De Configuration {#configuration-example} + +``` xml + + Version + + click_cost + any + + 0 + 5 + + + 86400 + 60 + + + + max + + 0 + 60 + + + 3600 + 300 + + + 86400 + 3600 + + + +``` + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/graphitemergetree/) diff --git a/docs/fr/operations/table_engines/hdfs.md b/docs/fr/operations/table_engines/hdfs.md new file mode 100644 index 00000000000..7fe493861d7 --- /dev/null +++ b/docs/fr/operations/table_engines/hdfs.md @@ -0,0 +1,120 @@ +--- +machine_translated: true +--- + +# HDFS {#table_engines-hdfs} + +Ce moteur fournit l'intégration avec [Apache Hadoop](https://en.wikipedia.org/wiki/Apache_Hadoop) l'écosystème en permettant de gérer les données sur [HDFS](https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html)via ClickHouse. Ce moteur est similaire +à l' [Fichier](file.md) et [URL](url.md) moteurs, mais fournit des fonctionnalités spécifiques Hadoop. + +## Utilisation {#usage} + +``` sql +ENGINE = HDFS(URI, format) +``` + +Le `URI` paramètre est L'URI du fichier entier dans HDFS. +Le `format` paramètre spécifie l'un des formats de fichier disponibles. Effectuer +`SELECT` requêtes, le format doit être pris en charge pour l'entrée, et à effectuer +`INSERT` queries – for output. The available formats are listed in the +[Format](../../interfaces/formats.md#formats) section. +Le chemin le cadre de `URI` peut contenir des globules. Dans ce cas, le tableau serait en lecture seule. + +**Exemple:** + +**1.** Configurer le `hdfs_engine_table` table: + +``` sql +CREATE TABLE hdfs_engine_table (name String, value UInt32) ENGINE=HDFS('hdfs://hdfs1:9000/other_storage', 'TSV') +``` + +**2.** Remplir le fichier: + +``` sql +INSERT INTO hdfs_engine_table VALUES ('one', 1), ('two', 2), ('three', 3) +``` + +**3.** Interroger les données: + +``` sql +SELECT * FROM hdfs_engine_table LIMIT 2 +``` + +``` text +┌─name─┬─value─┐ +│ one │ 1 │ +│ two │ 2 │ +└──────┴───────┘ +``` + +## Détails De Mise En Œuvre {#implementation-details} + +- Les lectures et les écritures peuvent être parallèles +- Pas pris en charge: + - `ALTER` et `SELECT...SAMPLE` opérations. + - Index. + - Réplication. + +**Globs dans le chemin** + +Plusieurs composants de chemin peuvent avoir des globs. Pour être traité, le fichier devrait exister et correspondre au modèle de chemin entier. Liste des fichiers détermine pendant `SELECT` (pas à l' `CREATE` moment). + +- `*` — Substitutes any number of any characters except `/` y compris la chaîne vide. +- `?` — Substitutes any single character. +- `{some_string,another_string,yet_another_one}` — Substitutes any of strings `'some_string', 'another_string', 'yet_another_one'`. +- `{N..M}` — Substitutes any number in range from N to M including both borders. + +Les Constructions avec `{}` sont similaires à l' [distant](../../query_language/table_functions/remote.md) table de fonction. + +**Exemple** + +1. Supposons que nous ayons plusieurs fichiers au format TSV avec les URI suivants sur HDFS: + +- ‘hdfs://hdfs1:9000/some\_dir/some\_file\_1’ +- ‘hdfs://hdfs1:9000/some\_dir/some\_file\_2’ +- ‘hdfs://hdfs1:9000/some\_dir/some\_file\_3’ +- ‘hdfs://hdfs1:9000/another\_dir/some\_file\_1’ +- ‘hdfs://hdfs1:9000/another\_dir/some\_file\_2’ +- ‘hdfs://hdfs1:9000/another\_dir/some\_file\_3’ + +1. Il y a plusieurs façons de faire une table composée des six fichiers: + + + +``` sql +CREATE TABLE table_with_range (name String, value UInt32) ENGINE = HDFS('hdfs://hdfs1:9000/{some,another}_dir/some_file_{1..3}', 'TSV') +``` + +Une autre façon: + +``` sql +CREATE TABLE table_with_question_mark (name String, value UInt32) ENGINE = HDFS('hdfs://hdfs1:9000/{some,another}_dir/some_file_?', 'TSV') +``` + +Table se compose de tous les fichiers dans les deux répertoires (tous les fichiers doivent satisfaire le format et le schéma décrits dans la requête): + +``` sql +CREATE TABLE table_with_asterisk (name String, value UInt32) ENGINE = HDFS('hdfs://hdfs1:9000/{some,another}_dir/*', 'TSV') +``` + +!!! warning "Avertissement" + Si la liste des fichiers contient des plages de nombres avec des zéros en tête, utilisez la construction avec des accolades pour chaque chiffre séparément ou utilisez `?`. + +**Exemple** + +Créer une table avec des fichiers nommés `file000`, `file001`, … , `file999`: + +``` sql +CREARE TABLE big_table (name String, value UInt32) ENGINE = HDFS('hdfs://hdfs1:9000/big_dir/file{0..9}{0..9}{0..9}', 'CSV') +``` + +## Les Colonnes Virtuelles {#virtual-columns} + +- `_path` — Path to the file. +- `_file` — Name of the file. + +**Voir Aussi** + +- [Les colonnes virtuelles](https://clickhouse.tech/docs/en/operations/table_engines/#table_engines-virtual_columns) + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/hdfs/) diff --git a/docs/fr/operations/table_engines/index.md b/docs/fr/operations/table_engines/index.md new file mode 100644 index 00000000000..2056a68139d --- /dev/null +++ b/docs/fr/operations/table_engines/index.md @@ -0,0 +1,81 @@ +--- +machine_translated: true +--- + +# Moteurs de Table {#table_engines} + +Le moteur de table (type de table) détermine: + +- Comment et où les données sont stockées, où les écrire et où les lire. +- Quelles requêtes sont prises en charge et comment. +- Accès simultané aux données. +- Utilisation des index, si elle est présente. +- Indique si l'exécution d'une requête multithread est possible. +- Paramètres de réplication des données. + +## Familles De Moteurs {#engine-families} + +### MergeTree {#mergetree} + +Les moteurs de table les plus universels et fonctionnels pour les tâches à forte charge. La propriété partagée par ces moteurs est l'insertion rapide des données avec traitement ultérieur des données d'arrière-plan. `MergeTree` les moteurs de la famille prennent en charge la réplication des données (avec [Répliqué\*](replication.md) versions de moteurs), le partitionnement, et d'autres fonctionnalités non prises en charge dans d'autres moteurs. + +Moteurs dans la famille: + +- [MergeTree](mergetree.md) +- [ReplacingMergeTree](replacingmergetree.md) +- [SummingMergeTree](summingmergetree.md) +- [AggregatingMergeTree](aggregatingmergetree.md) +- [CollapsingMergeTree](collapsingmergetree.md) +- [VersionedCollapsingMergeTree](versionedcollapsingmergetree.md) +- [GraphiteMergeTree](graphitemergetree.md) + +### Journal {#log} + +Léger [moteur](log_family.md) avec une fonctionnalité minimale. Ils sont les plus efficaces lorsque vous devez écrire rapidement de nombreuses petites tables (jusqu'à environ 1 million de lignes) et les lire plus tard dans leur ensemble. + +Moteurs dans la famille: + +- [TinyLog](tinylog.md) +- [StripeLog](stripelog.md) +- [Journal](log.md) + +### Moteurs d'Intergation {#intergation-engines} + +Moteurs de communication avec d'autres systèmes de stockage et de traitement de données. + +Moteurs dans la famille: + +- [Kafka](kafka.md) +- [MySQL](mysql.md) +- [ODBC](odbc.md) +- [JDBC](jdbc.md) +- [HDFS](hdfs.md) + +### Moteurs spéciaux {#special-engines} + +Moteurs dans la famille: + +- [Distribué](distributed.md) +- [MaterializedView](materializedview.md) +- [Dictionnaire](dictionary.md) +- [Fusionner](merge.md) +- [Fichier](file.md) +- [NULL](null.md) +- [Définir](set.md) +- [Rejoindre](join.md) +- [URL](url.md) +- [Vue](view.md) +- [Mémoire](memory.md) +- [Tampon](buffer.md) + +## Les colonnes virtuelles {#table_engines-virtual-columns} + +Colonne virtuelle est un attribut de moteur de table intégrale qui est défini dans le code source du moteur. + +Vous ne devez pas spécifier de colonnes virtuelles dans `CREATE TABLE` requête et vous ne pouvez pas les voir dans `SHOW CREATE TABLE` et `DESCRIBE TABLE` les résultats de la requête. Les colonnes virtuelles sont également en lecture seule, vous ne pouvez donc pas insérer de données dans des colonnes virtuelles. + +Pour sélectionner des données dans une colonne virtuelle, vous devez spécifier son nom `SELECT` requête. `SELECT *` ne renvoie pas de valeurs à partir de colonnes virtuelles. + +Si vous créez une table avec une colonne portant le même nom que l'une des colonnes virtuelles de la table, la colonne virtuelle devient inaccessible. Nous ne recommandons pas de faire cela. Pour éviter les conflits, les noms de colonnes virtuelles sont généralement précédés d'un trait de soulignement. + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/) diff --git a/docs/fr/operations/table_engines/jdbc.md b/docs/fr/operations/table_engines/jdbc.md new file mode 100644 index 00000000000..4987ca290d3 --- /dev/null +++ b/docs/fr/operations/table_engines/jdbc.md @@ -0,0 +1,87 @@ +--- +machine_translated: true +--- + +# JDBC {#table-engine-jdbc} + +Permet à ClickHouse de se connecter à des bases de données externes via [JDBC](https://en.wikipedia.org/wiki/Java_Database_Connectivity). + +Pour implémenter la connexion JDBC, ClickHouse utilise le programme séparé [clickhouse-JDBC-pont](https://github.com/alex-krash/clickhouse-jdbc-bridge) cela devrait fonctionner comme un démon. + +Ce moteur prend en charge le [Nullable](../../data_types/nullable.md) type de données. + +## Création d'une Table {#creating-a-table} + +``` sql +CREATE TABLE [IF NOT EXISTS] [db.]table_name +( + columns list... +) +ENGINE = JDBC(dbms_uri, external_database, external_table) +``` + +**Les Paramètres Du Moteur** + +- `dbms_uri` — URI of an external DBMS. + + Format: `jdbc:://:/?user=&password=`. + Exemple pour MySQL: `jdbc:mysql://localhost:3306/?user=root&password=root`. + +- `external_database` — Database in an external DBMS. + +- `external_table` — Name of the table in `external_database`. + +## Exemple D'Utilisation {#usage-example} + +Création d'une table dans le serveur MySQL en se connectant directement avec son client console: + +``` text +mysql> CREATE TABLE `test`.`test` ( + -> `int_id` INT NOT NULL AUTO_INCREMENT, + -> `int_nullable` INT NULL DEFAULT NULL, + -> `float` FLOAT NOT NULL, + -> `float_nullable` FLOAT NULL DEFAULT NULL, + -> PRIMARY KEY (`int_id`)); +Query OK, 0 rows affected (0,09 sec) + +mysql> insert into test (`int_id`, `float`) VALUES (1,2); +Query OK, 1 row affected (0,00 sec) + +mysql> select * from test; ++--------+--------------+-------+----------------+ +| int_id | int_nullable | float | float_nullable | ++--------+--------------+-------+----------------+ +| 1 | NULL | 2 | NULL | ++--------+--------------+-------+----------------+ +1 row in set (0,00 sec) +``` + +Création d'une table dans le serveur ClickHouse et sélection des données: + +``` sql +CREATE TABLE jdbc_table +( + `int_id` Int32, + `int_nullable` Nullable(Int32), + `float` Float32, + `float_nullable` Nullable(Float32) +) +ENGINE JDBC('jdbc:mysql://localhost:3306/?user=root&password=root', 'test', 'test') +``` + +``` sql +SELECT * +FROM jdbc_table +``` + +``` text +┌─int_id─┬─int_nullable─┬─float─┬─float_nullable─┐ +│ 1 │ ᴺᵁᴸᴸ │ 2 │ ᴺᵁᴸᴸ │ +└────────┴──────────────┴───────┴────────────────┘ +``` + +## Voir Aussi {#see-also} + +- [Fonction de table JDBC](../../query_language/table_functions/jdbc.md). + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/jdbc/) diff --git a/docs/fr/operations/table_engines/join.md b/docs/fr/operations/table_engines/join.md new file mode 100644 index 00000000000..a5210598195 --- /dev/null +++ b/docs/fr/operations/table_engines/join.md @@ -0,0 +1,108 @@ +--- +machine_translated: true +--- + +# Rejoindre {#join} + +Structure de données préparée pour l'utilisation dans [JOIN](../../query_language/select.md#select-join) opérations. + +## Création d'une Table {#creating-a-table} + +``` sql +CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] +( + name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1], + name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2], +) ENGINE = Join(join_strictness, join_type, k1[, k2, ...]) +``` + +Voir la description détaillée de la [CREATE TABLE](../../query_language/create.md#create-table-query) requête. + +**Les Paramètres Du Moteur** + +- `join_strictness` – [ADHÉRER à la rigueur](../../query_language/select.md#select-join-strictness). +- `join_type` – [Type de jointure](../../query_language/select.md#select-join-types). +- `k1[, k2, ...]` – Key columns from the `USING` la clause que l' `JOIN` l'opération est faite avec de la. + +Entrer `join_strictness` et `join_type` paramètres sans guillemets, par exemple, `Join(ANY, LEFT, col1)`. Ils doivent correspondre à la `JOIN` fonctionnement que le tableau sera utilisé pour. Si les paramètres ne correspondent pas, ClickHouse ne lance pas d'exception et peut renvoyer des données incorrectes. + +## Utilisation Du Tableau {#table-usage} + +### Exemple {#example} + +Création de la table de gauche: + +``` sql +CREATE TABLE id_val(`id` UInt32, `val` UInt32) ENGINE = TinyLog +``` + +``` sql +INSERT INTO id_val VALUES (1,11)(2,12)(3,13) +``` + +Création du côté droit `Join` table: + +``` sql +CREATE TABLE id_val_join(`id` UInt32, `val` UInt8) ENGINE = Join(ANY, LEFT, id) +``` + +``` sql +INSERT INTO id_val_join VALUES (1,21)(1,22)(3,23) +``` + +Rejoindre les tables: + +``` sql +SELECT * FROM id_val ANY LEFT JOIN id_val_join USING (id) SETTINGS join_use_nulls = 1 +``` + +``` text +┌─id─┬─val─┬─id_val_join.val─┐ +│ 1 │ 11 │ 21 │ +│ 2 │ 12 │ ᴺᵁᴸᴸ │ +│ 3 │ 13 │ 23 │ +└────┴─────┴─────────────────┘ +``` + +Comme alternative, vous pouvez récupérer des données de la `Join` table, spécifiant la valeur de la clé de jointure: + +``` sql +SELECT joinGet('id_val_join', 'val', toUInt32(1)) +``` + +``` text +┌─joinGet('id_val_join', 'val', toUInt32(1))─┐ +│ 21 │ +└────────────────────────────────────────────┘ +``` + +### Sélection et insertion de données {#selecting-and-inserting-data} + +Vous pouvez utiliser `INSERT` requêtes pour ajouter des données au `Join`-tables de moteur. Si la table a été créée avec `ANY` rigueur, les données pour les clés en double sont ignorées. Avec l' `ALL` rigueur, toutes les lignes sont ajoutées. + +Vous ne pouvez pas effectuer un `SELECT` requête directement à partir de la table. Au lieu de cela, utilisez l'une des méthodes suivantes: + +- Placez la table sur le côté droit dans un `JOIN` clause. +- Appelez le [joinGet](../../query_language/functions/other_functions.md#joinget) fonction, qui vous permet d'extraire des données de la table de la même manière que d'un dictionnaire. + +### Limitations et paramètres {#join-limitations-and-settings} + +Lors de la création d'un tableau, les paramètres suivants sont appliqués: + +- [join\_use\_nulls](../settings/settings.md#join_use_nulls) +- [max\_rows\_in\_join](../settings/query_complexity.md#settings-max_rows_in_join) +- [max\_bytes\_in\_join](../settings/query_complexity.md#settings-max_bytes_in_join) +- [join\_overflow\_mode](../settings/query_complexity.md#settings-join_overflow_mode) +- [join\_any\_take\_last\_row](../settings/settings.md#settings-join_any_take_last_row) + +Le `Join`- les tables de moteur ne peuvent pas être utilisées dans `GLOBAL JOIN` opérations. + +Le `Join`-moteur permet d'utiliser [join\_use\_nulls](../settings/settings.md#join_use_nulls) réglage de la `CREATE TABLE` déclaration. Et [SELECT](../../query_language/select.md) requête permet d'utiliser `join_use_nulls` trop. Si vous avez différents `join_use_nulls` paramètres, vous pouvez obtenir une table de jointure d'erreur. Il dépend de type de JOINTURE. Lorsque vous utilisez [joinGet](../../query_language/functions/other_functions.md#joinget) fonction, vous devez utiliser le même `join_use_nulls` réglage en `CRATE TABLE` et `SELECT` déclaration. + +## Le Stockage De Données {#data-storage} + +`Join` les données de la table sont toujours situées dans la RAM. Lors de l'insertion de lignes dans une table, ClickHouse écrit des blocs de données dans le répertoire du disque afin qu'ils puissent être restaurés lorsque le serveur redémarre. + +Si le serveur redémarre incorrectement, le bloc de données sur le disque peut être perdu ou endommagé. Dans ce cas, vous devrez peut-être supprimer manuellement le fichier contenant des données endommagées. + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/join/) diff --git a/docs/fr/operations/table_engines/kafka.md b/docs/fr/operations/table_engines/kafka.md new file mode 100644 index 00000000000..2c9d3abff9d --- /dev/null +++ b/docs/fr/operations/table_engines/kafka.md @@ -0,0 +1,173 @@ +--- +machine_translated: true +--- + +# Kafka {#kafka} + +Ce moteur fonctionne avec [Apache Kafka](http://kafka.apache.org/). + +Kafka vous permet de: + +- Publier ou s'abonner aux flux de données. +- Organiser le stockage tolérant aux pannes. +- Traiter les flux à mesure qu'ils deviennent disponibles. + +## Création d'une Table {#table_engine-kafka-creating-a-table} + +``` sql +CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] +( + name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1], + name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2], + ... +) ENGINE = Kafka() +SETTINGS + kafka_broker_list = 'host:port', + kafka_topic_list = 'topic1,topic2,...', + kafka_group_name = 'group_name', + kafka_format = 'data_format'[,] + [kafka_row_delimiter = 'delimiter_symbol',] + [kafka_schema = '',] + [kafka_num_consumers = N,] + [kafka_skip_broken_messages = N] +``` + +Les paramètres requis: + +- `kafka_broker_list` – A comma-separated list of brokers (for example, `localhost:9092`). +- `kafka_topic_list` – A list of Kafka topics. +- `kafka_group_name` – A group of Kafka consumers. Reading margins are tracked for each group separately. If you don't want messages to be duplicated in the cluster, use the same group name everywhere. +- `kafka_format` – Message format. Uses the same notation as the SQL `FORMAT` la fonction, tels que `JSONEachRow`. Pour plus d'informations, voir le [Format](../../interfaces/formats.md) section. + +Paramètres facultatifs: + +- `kafka_row_delimiter` – Delimiter character, which ends the message. +- `kafka_schema` – Parameter that must be used if the format requires a schema definition. For example, [Cap'n Proto](https://capnproto.org/) nécessite le chemin d'accès du fichier de schéma et le nom de la racine `schema.capnp:Message` objet. +- `kafka_num_consumers` – The number of consumers per table. Default: `1`. Spécifiez plus de consommateurs si le débit d'un consommateur est insuffisant. Le nombre total de consommateurs ne doit pas dépasser le nombre de partitions dans la rubrique, car un seul consommateur peut être affecté par partition. +- `kafka_skip_broken_messages` – Kafka message parser tolerance to schema-incompatible messages per block. Default: `0`. Si `kafka_skip_broken_messages = N` puis le moteur saute *N* Messages Kafka qui ne peuvent pas être analysés (un message est égal à une ligne de données). + +Exemple: + +``` sql + CREATE TABLE queue ( + timestamp UInt64, + level String, + message String + ) ENGINE = Kafka('localhost:9092', 'topic', 'group1', 'JSONEachRow'); + + SELECT * FROM queue LIMIT 5; + + CREATE TABLE queue2 ( + timestamp UInt64, + level String, + message String + ) ENGINE = Kafka SETTINGS kafka_broker_list = 'localhost:9092', + kafka_topic_list = 'topic', + kafka_group_name = 'group1', + kafka_format = 'JSONEachRow', + kafka_num_consumers = 4; + + CREATE TABLE queue2 ( + timestamp UInt64, + level String, + message String + ) ENGINE = Kafka('localhost:9092', 'topic', 'group1') + SETTINGS kafka_format = 'JSONEachRow', + kafka_num_consumers = 4; +``` + +
+ +Méthode obsolète pour créer une Table + +!!! attention "Attention" + N'utilisez pas cette méthode dans les nouveaux projets. Si possible, optez anciens projets à la méthode décrite ci-dessus. + +``` sql +Kafka(kafka_broker_list, kafka_topic_list, kafka_group_name, kafka_format + [, kafka_row_delimiter, kafka_schema, kafka_num_consumers, kafka_skip_broken_messages]) +``` + +
+ +## Description {#description} + +Les messages livrés sont suivis automatiquement, de sorte que chaque message d'un groupe n'est compté qu'une seule fois. Si vous souhaitez obtenir les données deux fois, créez une copie de la table avec un autre nom de groupe. + +Les groupes sont flexibles et synchronisés sur le cluster. Par exemple, si vous avez 10 thèmes et 5 copies d'une table dans un cluster, chaque copie obtient 2 sujets. Si le nombre de copies change, les rubriques sont redistribuées automatiquement entre les copies. En savoir plus à ce sujet à http://kafka.apache.org/intro. + +`SELECT` n'est pas particulièrement utile pour la lecture de messages (sauf pour le débogage), car chaque message ne peut être lu qu'une seule fois. Il est plus pratique de créer des threads en temps réel à l'aide de vues matérialisées. Pour ce faire: + +1. Utilisez le moteur pour créer un consommateur Kafka et considérez-le comme un flux de données. +2. Créez une table avec la structure souhaitée. +3. Créer une vue matérialisée qui convertit les données du moteur et le met dans une table créée précédemment. + +Lorsque l' `MATERIALIZED VIEW` rejoint le moteur, il commence à collecter des données en arrière-plan. Cela vous permet de recevoir continuellement des messages de Kafka et de les convertir au format requis en utilisant `SELECT`. +Une table kafka peut avoir autant de vues matérialisées que vous le souhaitez, elles ne lisent pas directement les données de la table kafka, mais reçoivent de nouveaux enregistrements( en blocs), de cette façon vous pouvez écrire sur plusieurs tables avec différents niveaux de détail (avec regroupement - agrégation et sans). + +Exemple: + +``` sql + CREATE TABLE queue ( + timestamp UInt64, + level String, + message String + ) ENGINE = Kafka('localhost:9092', 'topic', 'group1', 'JSONEachRow'); + + CREATE TABLE daily ( + day Date, + level String, + total UInt64 + ) ENGINE = SummingMergeTree(day, (day, level), 8192); + + CREATE MATERIALIZED VIEW consumer TO daily + AS SELECT toDate(toDateTime(timestamp)) AS day, level, count() as total + FROM queue GROUP BY day, level; + + SELECT level, sum(total) FROM daily GROUP BY level; +``` + +Pour améliorer les performances, les messages reçus sont regroupées en blocs de la taille de [max\_insert\_block\_size](../settings/settings.md#settings-max_insert_block_size). Si le bloc n'a pas été formé à l'intérieur [stream\_flush\_interval\_ms](../settings/settings.md) millisecondes, les données seront vidées dans le tableau, indépendamment de l'intégralité du bloc. + +Pour arrêter de recevoir des données de rubrique ou pour modifier la logique de conversion, détachez la vue matérialisée: + +``` sql + DETACH TABLE consumer; + ATTACH MATERIALIZED VIEW consumer; +``` + +Si vous souhaitez modifier la table cible en utilisant `ALTER`, nous vous recommandons de désactiver la vue matériel pour éviter les divergences entre la table cible et les données de la vue. + +## Configuration {#configuration} + +Similaire à GraphiteMergeTree, le moteur Kafka prend en charge la configuration étendue à l'aide du fichier de configuration ClickHouse. Il y a deux clés de configuration que vous pouvez utiliser: global (`kafka`) et des rubriques (`kafka_*`). La configuration globale est appliquée en premier, puis la configuration au niveau de la rubrique est appliquée (si elle existe). + +``` xml + + + cgrp + smallest + + + + + 250 + 100000 + +``` + +Pour obtenir une liste des options de configuration possibles, consultez [librdkafka référence de configuration](https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md). Utilisez le trait de soulignement (`_`) au lieu d'un point dans la configuration ClickHouse. Exemple, `check.crcs=true` sera `true`. + +## Les Colonnes Virtuelles {#virtual-columns} + +- `_topic` — Kafka topic. +- `_key` — Key of the message. +- `_offset` — Offset of the message. +- `_timestamp` — Timestamp of the message. +- `_partition` — Partition of Kafka topic. + +**Voir Aussi** + +- [Les colonnes virtuelles](index.md#table_engines-virtual_columns) + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/kafka/) diff --git a/docs/fr/operations/table_engines/log.md b/docs/fr/operations/table_engines/log.md new file mode 100644 index 00000000000..799976e66c1 --- /dev/null +++ b/docs/fr/operations/table_engines/log.md @@ -0,0 +1,13 @@ +--- +machine_translated: true +--- + +# Journal {#log} + +Moteur appartient à la famille de journal des moteurs. Voir les propriétés communes des moteurs de journal et leurs différences dans le [Famille De Moteurs En Rondins](log_family.md) article. + +Journal diffère de [TinyLog](tinylog.md) dans un petit fichier de “marks” réside avec les fichiers de colonne. Ces marques sont écrites sur chaque bloc de données et contiennent des décalages qui indiquent où commencer à lire le fichier afin d'ignorer le nombre de lignes spécifié. Cela permet de lire les données de table dans plusieurs threads. +Pour l'accès aux données simultanées, les opérations de lecture peuvent être effectuées simultanément, tandis que les opérations d'écriture bloc lit et l'autre. +Le moteur de journal ne prend pas en charge les index. De même, si l'écriture dans une table a échoué, la table est cassée et la lecture de celle-ci renvoie une erreur. Le moteur de journal est approprié pour les données temporaires, les tables en écriture unique, et à des fins de test ou de démonstration. + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/log/) diff --git a/docs/fr/operations/table_engines/log_family.md b/docs/fr/operations/table_engines/log_family.md new file mode 100644 index 00000000000..99b822b5911 --- /dev/null +++ b/docs/fr/operations/table_engines/log_family.md @@ -0,0 +1,43 @@ +--- +machine_translated: true +--- + +# Famille De Moteurs En Rondins {#log-engine-family} + +Ces moteurs ont été développés pour les scénarios où vous devez écrire rapidement de nombreuses petites tables (jusqu'à environ 1 million de lignes) et les lire plus tard dans leur ensemble. + +Les moteurs de la famille: + +- [StripeLog](stripelog.md) +- [Journal](log.md) +- [TinyLog](tinylog.md) + +## Propriétés communes {#common-properties} + +Moteur: + +- Stocker des données sur un disque. + +- Ajouter des données à la fin du fichier lors de l'écriture. + +- Bloque simultanées dans l'accès aux données. + + Lors `INSERT` requêtes, la table est verrouillée, et d'autres requêtes pour la lecture et l'écriture de données attendent que la table se déverrouille. S'il n'y a pas de requêtes d'écriture de données, un certain nombre de requêtes de lecture de données peuvent être effectuées simultanément. + +- Ne prennent pas en charge [mutation](../../query_language/alter.md#alter-mutations) opérations. + +- Ne prennent pas en charge les index. + + Cela signifie que `SELECT` les requêtes pour les plages de données ne sont pas efficaces. + +- N'écrivez pas de données de manière atomique. + + Vous pouvez obtenir une table avec des données corrompues si quelque chose interrompt l'opération d'écriture, par exemple, un arrêt anormal du serveur. + +## Différence {#differences} + +Le `TinyLog` le moteur est le plus simple de la famille et offre la fonctionnalité la plus pauvre et la plus faible efficacité. Le `TinyLog` le moteur ne prend pas en charge la lecture de données parallèles par plusieurs threads. Il lit les données plus lentement que les autres moteurs de la famille qui prennent en charge la lecture parallèle et utilise presque autant de descripteurs que `Log` moteur, car il stocke chaque colonne dans un fichier séparé. Utilisez-le dans des scénarios simples à faible charge. + +Le `Log` et `StripeLog` les moteurs prennent en charge la lecture de données parallèle. Lors de la lecture de données, ClickHouse utilise plusieurs threads. Chaque thread traite un bloc de données séparé. Le `Log` le moteur utilise un fichier distinct pour chaque colonne de la table. `StripeLog` stocke toutes les données dans un seul fichier. En conséquence, la `StripeLog` moteur utilise moins de descripteurs dans le système d'exploitation, mais le `Log` moteur fournit une plus grande efficacité lors de la lecture des données. + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/log_family/) diff --git a/docs/fr/operations/table_engines/materializedview.md b/docs/fr/operations/table_engines/materializedview.md new file mode 100644 index 00000000000..599b7274028 --- /dev/null +++ b/docs/fr/operations/table_engines/materializedview.md @@ -0,0 +1,9 @@ +--- +machine_translated: true +--- + +# MaterializedView {#materializedview} + +Utilisé pour implémenter des vues matérialisées (pour plus d'informations, voir [CREATE TABLE](../../query_language/create.md)). Pour stocker des données, il utilise un moteur différent qui a été spécifié lors de la création de la vue. Lors de la lecture d'une table, il utilise juste ce moteur. + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/materializedview/) diff --git a/docs/fr/operations/table_engines/memory.md b/docs/fr/operations/table_engines/memory.md new file mode 100644 index 00000000000..6bd043d02ee --- /dev/null +++ b/docs/fr/operations/table_engines/memory.md @@ -0,0 +1,16 @@ +--- +machine_translated: true +--- + +# Mémoire {#memory} + +Le moteur de mémoire stocke les données en RAM, sous forme non compressée. Les données sont stockées exactement sous la même forme qu'elles sont reçues lors de la lecture. En d'autres termes, la lecture de ce tableau est entièrement gratuit. +L'accès aux données simultanées est synchronisé. Les verrous sont courts: les opérations de lecture et d'écriture ne se bloquent pas. +Les index ne sont pas pris en charge. La lecture est parallélisée. +La productivité maximale (plus de 10 Go / s) est atteinte sur les requêtes simples, car il n'y a pas de lecture à partir du disque, de décompression ou de désérialisation des données. (Il convient de noter que dans de nombreux cas, la productivité du moteur MergeTree est presque aussi élevée.) +Lors du redémarrage d'un serveur, les données disparaissent de la table et la table devient vide. +Normalement, l'utilisation de ce moteur de table n'est pas justifiée. Cependant, il peut être utilisé pour des tests, et pour des tâches où la vitesse maximale est requise sur un nombre relativement faible de lignes (jusqu'à environ 100 000 000). + +Le moteur de mémoire est utilisé par le système pour les tables temporaires avec des données de requête externes (voir la section “External data for processing a query”), et pour la mise en œuvre globale dans (voir la section “IN operators”). + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/memory/) diff --git a/docs/fr/operations/table_engines/merge.md b/docs/fr/operations/table_engines/merge.md new file mode 100644 index 00000000000..5a751251b0d --- /dev/null +++ b/docs/fr/operations/table_engines/merge.md @@ -0,0 +1,67 @@ +--- +machine_translated: true +--- + +# Fusionner {#merge} + +Le `Merge` moteur (à ne pas confondre avec `MergeTree`) ne stocke pas les données elles-mêmes, mais permet la lecture de n'importe quel nombre d'autres tables simultanément. +La lecture est automatiquement parallélisée. L'écriture dans une table n'est pas prise en charge. Lors de la lecture, les index des tables en cours de lecture sont utilisés, s'ils existent. +Le `Merge` engine accepte les paramètres: le nom de la base de données et une expression régulière pour les tables. + +Exemple: + +``` sql +Merge(hits, '^WatchLog') +``` + +Les données seront lues à partir des tableaux du `hits` base de données dont les noms correspondent à l'expression régulière ‘`^WatchLog`’. + +Au lieu du nom de la base de données, vous pouvez utiliser une expression constante qui renvoie une chaîne. Exemple, `currentDatabase()`. + +Regular expressions — [re2](https://github.com/google/re2) (prend en charge un sous-ensemble de PCRE), sensible à la casse. +Voir les notes sur les symboles d'échappement dans les expressions régulières “match” section. + +Lors de la sélection des tables à lire, le `Merge` le tableau lui-même ne sera pas choisie, même si elle correspond à l'expression rationnelle. C'est pour éviter les boucles. +Il est possible de créer deux `Merge` des tables qui essaieront sans cesse de lire les données des autres, mais ce n'est pas une bonne idée. + +L'utilisation traditionnelle de la `Merge` moteur pour travailler avec un grand nombre de `TinyLog` les tables comme si avec une seule table. + +Exemple 2: + +Disons que vous avez une ancienne table (WatchLog\_old) et que vous avez décidé de changer de partitionnement sans déplacer les données vers une nouvelle table (WatchLog\_new) et que vous devez voir les données des deux tables. + +``` sql +CREATE TABLE WatchLog_old(date Date, UserId Int64, EventType String, Cnt UInt64) +ENGINE=MergeTree(date, (UserId, EventType), 8192); +INSERT INTO WatchLog_old VALUES ('2018-01-01', 1, 'hit', 3); + +CREATE TABLE WatchLog_new(date Date, UserId Int64, EventType String, Cnt UInt64) +ENGINE=MergeTree PARTITION BY date ORDER BY (UserId, EventType) SETTINGS index_granularity=8192; +INSERT INTO WatchLog_new VALUES ('2018-01-02', 2, 'hit', 3); + +CREATE TABLE WatchLog as WatchLog_old ENGINE=Merge(currentDatabase(), '^WatchLog'); + +SELECT * +FROM WatchLog +``` + +``` text +┌───────date─┬─UserId─┬─EventType─┬─Cnt─┐ +│ 2018-01-01 │ 1 │ hit │ 3 │ +└────────────┴────────┴───────────┴─────┘ +┌───────date─┬─UserId─┬─EventType─┬─Cnt─┐ +│ 2018-01-02 │ 2 │ hit │ 3 │ +└────────────┴────────┴───────────┴─────┘ +``` + +## Les Colonnes Virtuelles {#virtual-columns} + +- `_table` — Contains the name of the table from which data was read. Type: [Chaîne](../../data_types/string.md). + + Vous pouvez définir les conditions constantes sur `_table` dans le `WHERE/PREWHERE` clause (par exemple, `WHERE _table='xyz'`). Dans ce cas l'opération de lecture est effectuée uniquement pour les tables où la condition sur `_table` est satisfaite, pour le `_table` colonne agit comme un index. + +**Voir Aussi** + +- [Les colonnes virtuelles](index.md#table_engines-virtual_columns) + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/merge/) diff --git a/docs/fr/operations/table_engines/mergetree.md b/docs/fr/operations/table_engines/mergetree.md new file mode 100644 index 00000000000..f44a5f596a2 --- /dev/null +++ b/docs/fr/operations/table_engines/mergetree.md @@ -0,0 +1,653 @@ +--- +machine_translated: true +--- + +# MergeTree {#table_engines-mergetree} + +Le `MergeTree` moteur et autres moteurs de cette famille (`*MergeTree`) sont les moteurs de table ClickHouse les plus robustes. + +Les moteurs de la `MergeTree` famille sont conçus pour l'insertion d'une très grande quantité de données dans une table. Les données sont rapidement écrites dans la table partie par partie, puis des règles sont appliquées pour fusionner les parties en arrière-plan. Cette méthode est beaucoup plus efficace que de réécrire continuellement les données dans le stockage pendant l'insertion. + +Principales caractéristiques: + +- Stocke les données triées par clé primaire. + + Cela vous permet de créer un petit index clairsemé qui aide à trouver les données plus rapidement. + +- Les Partitions peuvent être utilisées si [clé de partitionnement](custom_partitioning_key.md) est spécifié. + + ClickHouse prend en charge certaines opérations avec des partitions plus efficaces que les opérations générales sur les mêmes données avec le même résultat. ClickHouse Coupe également automatiquement les données de partition où la clé de partitionnement est spécifiée dans la requête. Cela améliore également les performances de la requête. + +- Prise en charge de la réplication des données. + + La famille de `ReplicatedMergeTree` tables fournit la réplication des données. Pour plus d'informations, voir [Réplication des données](replication.md). + +- Appui d'échantillonnage de données. + + Si nécessaire, vous pouvez définir la méthode d'échantillonnage des données dans le tableau. + +!!! info "Info" + Le [Fusionner](merge.md) le moteur n'appartient pas à la `*MergeTree` famille. + +## Création d'une Table {#table_engine-mergetree-creating-a-table} + +``` sql +CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] +( + name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1], + name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2], + ... + INDEX index_name1 expr1 TYPE type1(...) GRANULARITY value1, + INDEX index_name2 expr2 TYPE type2(...) GRANULARITY value2 +) ENGINE = MergeTree() +[PARTITION BY expr] +[ORDER BY expr] +[PRIMARY KEY expr] +[SAMPLE BY expr] +[TTL expr [DELETE|TO DISK 'xxx'|TO VOLUME 'xxx'], ...] +[SETTINGS name=value, ...] +``` + +Pour une description des paramètres, voir [Créer une description de requête](../../query_language/create.md). + +!!! note "Note" + `INDEX` est une fonctionnalité expérimentale, voir [Index De Saut De Données](#table_engine-mergetree-data_skipping-indexes). + +### Les Clauses De Requête {#mergetree-query-clauses} + +- `ENGINE` — Name and parameters of the engine. `ENGINE = MergeTree()`. Le `MergeTree` le moteur n'a pas de paramètres. + +- `PARTITION BY` — The [clé de partitionnement](custom_partitioning_key.md). + + Pour le partitionnement par mois, utilisez les `toYYYYMM(date_column)` l'expression, où `date_column` est une colonne avec une date du type [Date](../../data_types/date.md). Les noms de partition ici ont le `"YYYYMM"` format. + +- `ORDER BY` — The sorting key. + + Un tuple de colonnes ou d'expressions arbitraires. Exemple: `ORDER BY (CounterID, EventDate)`. + +- `PRIMARY KEY` — The primary key if it [diffère de la clé de tri](mergetree.md). + + Par défaut, la clé primaire est la même que la clé de tri (qui est spécifiée par `ORDER BY` clause). Ainsi dans la plupart des cas il n'est pas nécessaire de spécifier un `PRIMARY KEY` clause. + +- `SAMPLE BY` — An expression for sampling. + + Si un échantillonnage expression est utilisée, la clé primaire doit contenir. Exemple: `SAMPLE BY intHash32(UserID) ORDER BY (CounterID, EventDate, intHash32(UserID))`. + +- `TTL` — A list of rules specifying storage duration of rows and defining logic of automatic parts movement [entre disques et volumes](#table_engine-mergetree-multiple-volumes). + + L'Expression doit en avoir une `Date` ou `DateTime` colonne comme un résultat. Exemple: + `TTL date + INTERVAL 1 DAY` + + Le Type de la règle `DELETE|TO DISK 'xxx'|TO VOLUME 'xxx'` spécifie une action à effectuer avec la partie si l'expression est satisfaite (atteint l'heure actuelle): suppression des Lignes expirées, déplacement d'une partie (si l'expression est satisfaite pour toutes les lignes d'une partie) sur le disque spécifié (`TO DISK 'xxx'`) ou de volume (`TO VOLUME 'xxx'`). Le type par défaut de la règle est suppression (`DELETE`). Liste de règles multiples peut spécifié, mais il ne devrait pas y avoir plus d'un `DELETE` règle. + + Pour plus de détails, voir [TTL pour les colonnes et les tableaux](#table_engine-mergetree-ttl) + +- `SETTINGS` — Additional parameters that control the behavior of the `MergeTree`: + + - `index_granularity` — Maximum number of data rows between the marks of an index. Default value: 8192. See [Le Stockage De Données](#mergetree-data-storage). + - `index_granularity_bytes` — Maximum size of data granules in bytes. Default value: 10Mb. To restrict the granule size only by number of rows, set to 0 (not recommended). See [Le Stockage De Données](#mergetree-data-storage). + - `enable_mixed_granularity_parts` — Enables or disables transitioning to control the granule size with the `index_granularity_bytes` paramètre. Avant la version 19.11, il n'y avait que le `index_granularity` réglage pour restreindre la taille des granules. Le `index_granularity_bytes` le paramètre améliore les performances de ClickHouse lors de la sélection de données à partir de tables avec de grandes lignes (des dizaines et des centaines de mégaoctets). Si vous avez des tables avec de grandes lignes, vous pouvez activer ce paramètre pour les tables d'améliorer l'efficacité de `SELECT` requête. + - `use_minimalistic_part_header_in_zookeeper` — Storage method of the data parts headers in ZooKeeper. If `use_minimalistic_part_header_in_zookeeper=1`, puis Zookeeper stocke moins de données. Pour plus d'informations, voir le [Description du réglage](../server_settings/settings.md#server-settings-use_minimalistic_part_header_in_zookeeper) dans “Server configuration parameters”. + - `min_merge_bytes_to_use_direct_io` — The minimum data volume for merge operation that is required for using direct I/O access to the storage disk. When merging data parts, ClickHouse calculates the total storage volume of all the data to be merged. If the volume exceeds `min_merge_bytes_to_use_direct_io` octets, ClickHouse lit et écrit les données sur le disque de stockage en utilisant l'interface d'E/S directe (`O_DIRECT` option). Si `min_merge_bytes_to_use_direct_io = 0`, puis les e/s directes sont désactivées. Valeur par défaut: `10 * 1024 * 1024 * 1024` octet. + + - `merge_with_ttl_timeout` — Minimum delay in seconds before repeating a merge with TTL. Default value: 86400 (1 day). + - `write_final_mark` — Enables or disables writing the final index mark at the end of data part (after the last byte). Default value: 1. Don't turn it off. + - `merge_max_block_size` — Maximum number of rows in block for merge operations. Default value: 8192. + - `storage_policy` — Storage policy. See [Utilisation de plusieurs périphériques de bloc pour le stockage de données](#table_engine-mergetree-multiple-volumes). + +**Exemple de réglage des Sections** + +``` sql +ENGINE MergeTree() PARTITION BY toYYYYMM(EventDate) ORDER BY (CounterID, EventDate, intHash32(UserID)) SAMPLE BY intHash32(UserID) SETTINGS index_granularity=8192 +``` + +Dans l'exemple, nous définissons le partitionnement par mois. + +Nous définissons également une expression pour l'échantillonnage en tant que hachage par l'ID utilisateur. Cela vous permet de pseudorandomiser les données dans la table pour chaque `CounterID` et `EventDate`. Si vous définissez un [SAMPLE](../../query_language/select.md#select-sample-clause) clause lors de la sélection des données, ClickHouse retournera un échantillon de données uniformément pseudo-aléatoire pour un sous-ensemble d'utilisateurs. + +Le `index_granularity` paramètre peut être omis, car 8192 est la valeur par défaut. + +
+ +Méthode obsolète pour créer une Table + +!!! attention "Attention" + N'utilisez pas cette méthode dans les nouveaux projets. Si possible, optez anciens projets à la méthode décrite ci-dessus. + +``` sql +CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] +( + name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1], + name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2], + ... +) ENGINE [=] MergeTree(date-column [, sampling_expression], (primary, key), index_granularity) +``` + +**Paramètres MergeTree ()** + +- `date-column` — The name of a column of the [Date](../../data_types/date.md) type. ClickHouse crée automatiquement des partitions par mois en fonction de cette colonne. Les noms de partition sont dans le `"YYYYMM"` format. +- `sampling_expression` — An expression for sampling. +- `(primary, key)` — Primary key. Type: [Tuple()](../../data_types/tuple.md) +- `index_granularity` — The granularity of an index. The number of data rows between the “marks” d'un index. La valeur 8192 est appropriée pour la plupart des tâches. + +**Exemple** + +``` sql +MergeTree(EventDate, intHash32(UserID), (CounterID, EventDate, intHash32(UserID)), 8192) +``` + +Le `MergeTree` le moteur est configuré de la même manière que dans l'exemple ci-dessus pour la méthode de configuration du moteur principal. +
+ +## Le Stockage De Données {#mergetree-data-storage} + +Une table se compose de parties de données triées par clé primaire. + +Lorsque des données sont insérées dans une table, des parties de données distinctes sont créées et chacune d'elles est lexicographiquement triée par clé primaire. Par exemple, si la clé primaire est `(CounterID, Date)`, les données de la pièce sont triées par `CounterID` et au sein de chaque `CounterID` il est commandé par `Date`. + +Les données appartenant à différentes partitions sont séparés en différentes parties. En arrière-plan, ClickHouse fusionne des parties de données pour un stockage plus efficace. Les parties appartenant à des partitions différentes ne sont pas fusionnées. La fusion mécanisme ne garantit pas que toutes les lignes avec la même clé primaire sera dans la même partie des données. + +Chaque partie de données est logiquement divisée en granules. Un granule est le plus petit ensemble de données indivisible que ClickHouse lit lors de la sélection des données. ClickHouse ne divise pas les lignes ou les valeurs, de sorte que chaque granule contient toujours un nombre entier de lignes. La première rangée de granules est marqué avec la valeur de la clé primaire de la ligne. Pour chaque partie de données, ClickHouse crée un fichier d'index qui stocke les marques. Pour chaque colonne, que ce soit dans la clé primaire ou non, ClickHouse stocke également les mêmes marques. Ces marques vous permettent de trouver des données directement dans les fichiers de colonnes. + +La taille de granule est limitée par `index_granularity` et `index_granularity_bytes` paramètres du moteur de table. Le nombre de lignes dans un granule jette dans la `[1, index_granularity]` gamme, en fonction de la taille des lignes. La taille des granulés peut dépasser `index_granularity_bytes` si la taille d'une seule ligne est supérieure à la valeur du paramètre. Dans ce cas, la taille du granule est égale à la taille de la ligne. + +## Clés primaires et Index dans les requêtes {#primary-keys-and-indexes-in-queries} + +Prendre la `(CounterID, Date)` clé primaire comme un exemple. Dans ce cas, le tri et l'index peuvent être illustrés comme suit: + + Whole data: [-------------------------------------------------------------------------] + CounterID: [aaaaaaaaaaaaaaaaaabbbbcdeeeeeeeeeeeeefgggggggghhhhhhhhhiiiiiiiiikllllllll] + Date: [1111111222222233331233211111222222333211111112122222223111112223311122333] + Marks: | | | | | | | | | | | + a,1 a,2 a,3 b,3 e,2 e,3 g,1 h,2 i,1 i,3 l,3 + Marks numbers: 0 1 2 3 4 5 6 7 8 9 10 + +Si la requête de données spécifie: + +- `CounterID in ('a', 'h')` le serveur lit les données dans les gammes des marques `[0, 3)` et `[6, 8)`. +- `CounterID IN ('a', 'h') AND Date = 3` le serveur lit les données dans les gammes des marques `[1, 3)` et `[7, 8)`. +- `Date = 3`, le serveur lit les données de la plage de marque `[1, 10]`. + +Les exemples ci-dessus montrent qu'il est toujours plus efficace d'utiliser un indice qu'une analyse complète. + +Un index clairsemé permet de lire des données supplémentaires. Lors de la lecture d'une plage unique de la clé primaire, jusqu'à `index_granularity * 2` lignes supplémentaires dans chaque bloc de données peut être lu. + +Les index clairsemés vous permettent de travailler avec un très grand nombre de lignes de table, car dans la plupart des cas, ces index tiennent dans la RAM de l'ordinateur. + +ClickHouse ne nécessite pas de clé primaire unique. Vous pouvez insérer plusieurs lignes avec la même clé primaire. + +### Sélection de la clé primaire {#selecting-the-primary-key} + +Le nombre de colonnes de la clé primaire n'est pas explicitement limitée. Selon la structure de données, vous pouvez inclure plus ou moins de colonnes dans la clé primaire. Cela peut: + +- Améliorer la performance d'un indice. + + Si la clé primaire est `(a, b)`, puis ajouter une autre colonne `c` pour améliorer les performances si les conditions suivantes sont réunies: + + - Il y a des requêtes avec une condition sur la colonne `c`. + - Longues plages de données (plusieurs fois plus longues que `index_granularity`) avec des valeurs identiques pour `(a, b)` sont communs. En d'autres termes, lors de l'ajout d'une autre colonne vous permet de passer très longues plages de données. + +- Améliorer la compression des données. + + ClickHouse trie les données par clé primaire, donc plus la cohérence est élevée, meilleure est la compression. + +- Fournir une logique supplémentaire lors de la fusion de parties de [CollapsingMergeTree](collapsingmergetree.md#table_engine-collapsingmergetree) et [SummingMergeTree](summingmergetree.md) moteur. + + Dans ce cas, on peut spécifier l' *clé de tri* qui est différente de la clé primaire. + +Une clé primaire longue affectera négativement les performances d'insertion et la consommation de mémoire, mais des colonnes supplémentaires dans la clé primaire n'affecteront pas les performances de ClickHouse pendant `SELECT` requête. + +### Choisir une clé primaire qui diffère de la clé de tri {#choosing-a-primary-key-that-differs-from-the-sorting-key} + +Il est possible de spécifier une clé primaire (une expression avec des valeurs qui sont écrites dans le fichier d'index pour chaque marque) qui est différente de la clé de tri (une expression pour trier les lignes dans les parties de données). Dans ce cas, le tuple d'expression de clé primaire doit être un préfixe du tuple d'expression de clé de tri. + +Cette fonctionnalité est utile lorsque vous utilisez le [SummingMergeTree](summingmergetree.md) et +[AggregatingMergeTree](aggregatingmergetree.md) table des moteurs. Dans un cas courant lors de l'utilisation de ces moteurs, la table a deux types de colonnes: *dimension* et *mesure*. Les requêtes typiques agrégent les valeurs des colonnes de mesure avec arbitraire `GROUP BY` et filtrage par dimensions. Comme SummingMergeTree et AggregatingMergeTree regroupent des lignes avec la même valeur de la clé de tri, il est naturel d'y ajouter toutes les dimensions. En conséquence, l'expression se compose d'une longue liste de colonnes, et cette liste doit être mise à jour fréquemment avec nouvellement ajoutée. + +Dans ce cas, il est logique de ne laisser que quelques colonnes dans la clé primaire qui fourniront des analyses de plage efficaces et ajouteront les colonnes de dimension restantes au tuple de clé de tri. + +[ALTER](../../query_language/alter.md) la clé de tri est une opération légère car lorsqu'une nouvelle colonne est ajoutée simultanément à la table et à la clé de tri, les parties de données existantes n'ont pas besoin d'être modifiées. Comme l'ancienne clé de tri est un préfixe de la nouvelle clé de tri et qu'il n'y a pas de données dans la colonne nouvellement ajoutée, les données sont triées à la fois par l'ancienne et la nouvelle clé de tri au moment de la modification de la table. + +### Utilisation D'Index et de Partitions dans les requêtes {#use-of-indexes-and-partitions-in-queries} + +Pour `SELECT` requêtes, clickhouse analyse si un index peut être utilisé. Un index peut être utilisé si le `WHERE/PREWHERE` clause a une expression (comme l'un des éléments de conjonction, ou entièrement) qui représente une opération de comparaison d'égalité ou d'inégalité, ou si elle a `IN` ou `LIKE` avec un préfixe fixe sur les colonnes ou les expressions qui sont dans la clé primaire ou la clé de partitionnement, ou sur certaines fonctions partiellement répétitives de ces colonnes, ou les relations logiques de ces expressions. + +Ainsi, il est possible d'exécuter des requêtes sur une ou plusieurs plages de la clé primaire. Dans cet exemple, les requêtes seront rapides lorsqu'elles sont exécutées pour une balise de suivi spécifique, pour une balise et une plage de dates spécifiques, pour une balise et une date spécifiques, pour plusieurs balises avec une plage de dates, etc. + +Regardons le moteur configuré comme suit: + + ENGINE MergeTree() PARTITION BY toYYYYMM(EventDate) ORDER BY (CounterID, EventDate) SETTINGS index_granularity=8192 + +Dans ce cas, dans les requêtes: + +``` sql +SELECT count() FROM table WHERE EventDate = toDate(now()) AND CounterID = 34 +SELECT count() FROM table WHERE EventDate = toDate(now()) AND (CounterID = 34 OR CounterID = 42) +SELECT count() FROM table WHERE ((EventDate >= toDate('2014-01-01') AND EventDate <= toDate('2014-01-31')) OR EventDate = toDate('2014-05-01')) AND CounterID IN (101500, 731962, 160656) AND (CounterID = 101500 OR EventDate != toDate('2014-05-01')) +``` + +ClickHouse utilisera l'index de clé primaire pour supprimer les données incorrectes et la clé de partitionnement mensuel pour supprimer les partitions qui se trouvent dans des plages de dates incorrectes. + +Les requêtes ci-dessus montrent que l'index est utilisé même pour les expressions complexes. La lecture de la table est organisée de sorte que l'utilisation de l'index ne peut pas être plus lente qu'une analyse complète. + +Dans l'exemple ci-dessous, l'index ne peut pas être utilisé. + +``` sql +SELECT count() FROM table WHERE CounterID = 34 OR URL LIKE '%upyachka%' +``` + +Pour vérifier si ClickHouse pouvez utiliser l'index lors de l'exécution d'une requête, utilisez les paramètres [force\_index\_by\_date](../settings/settings.md#settings-force_index_by_date) et [force\_primary\_key](../settings/settings.md). + +La clé de partitionnement par mois permet de lire uniquement les blocs de données qui contiennent des dates de la plage appropriée. Dans ce cas, le bloc de données peut contenir des données pour plusieurs dates (jusqu'à un mois entier). Dans un bloc, les données sont triées par clé primaire, qui peut ne pas contenir la date comme première colonne. Pour cette raison, l'utilisation d'une requête avec seulement une condition de date qui ne spécifie pas le préfixe de clé primaire entraînera la lecture de plus de données que pour une seule date. + +### Utilisation de L'Index pour les clés primaires partiellement monotones {#use-of-index-for-partially-monotonic-primary-keys} + +Considérons, par exemple, les jours du mois. Ils forment un [monotone de la séquence](https://en.wikipedia.org/wiki/Monotonic_function) pendant un mois, mais pas monotone pendant des périodes plus longues. C'est une séquence partiellement monotone. Si un utilisateur crée la table avec une clé primaire partiellement monotone, ClickHouse crée un index clairsemé comme d'habitude. Lorsqu'un utilisateur sélectionne des données à partir de ce type de table, ClickHouse analyse les conditions de requête. Si L'utilisateur veut obtenir des données entre deux marques de l'index et que ces deux marques tombent dans un mois, ClickHouse peut utiliser l'index dans ce cas particulier car il peut calculer la distance entre les paramètres d'une requête et les marques d'index. + +ClickHouse ne peut pas utiliser un index si les valeurs de la clé primaire dans la plage de paramètres de requête ne représentent pas une séquence monotone. Dans ce cas, ClickHouse utilise la méthode full scan. + +ClickHouse utilise cette logique non seulement pour les séquences de jours du mois, mais pour toute clé primaire qui représente une séquence partiellement monotone. + +### Index De Saut De Données (Expérimental) {#table_engine-mergetree-data_skipping-indexes} + +La déclaration d'index se trouve dans la section colonnes du `CREATE` requête. + +``` sql +INDEX index_name expr TYPE type(...) GRANULARITY granularity_value +``` + +Pour les tables de la `*MergeTree` famille, les indices de saut de données peuvent être spécifiés. + +Ces indices agrégent certaines informations sur l'expression spécifiée sur les blocs, qui consistent en `granularity_value` granules (la taille du granule est spécifiée en utilisant `index_granularity` réglage dans le moteur de table). Ensuite, ces agrégats sont utilisés dans `SELECT` requêtes pour réduire la quantité de données à lire à partir du disque en ignorant de gros blocs de données `where` la requête ne peut pas être satisfait. + +**Exemple** + +``` sql +CREATE TABLE table_name +( + u64 UInt64, + i32 Int32, + s String, + ... + INDEX a (u64 * i32, s) TYPE minmax GRANULARITY 3, + INDEX b (u64 * length(s)) TYPE set(1000) GRANULARITY 4 +) ENGINE = MergeTree() +... +``` + +Les Indices de L'exemple peuvent être utilisés par ClickHouse pour réduire la quantité de données à lire à partir du disque dans les requêtes suivantes: + +``` sql +SELECT count() FROM table WHERE s < 'z' +SELECT count() FROM table WHERE u64 * i32 == 10 AND u64 * length(s) >= 1234 +``` + +#### Types d'Indices disponibles {#available-types-of-indices} + +- `minmax` + + Magasins extrêmes de l'expression spécifiée (si l'expression est `tuple` puis il stocke les extrêmes pour chaque élément de `tuple`), utilise les informations stockées pour sauter des blocs de données comme la clé primaire. + +- `set(max_rows)` + + Stocke les valeurs uniques de l'expression spécifiée (pas plus de `max_rows` rangée, `max_rows=0` moyen “no limits”). Utilise les valeurs pour vérifier si le `WHERE` l'expression n'est pas satisfiable sur un bloc de données. + +- `ngrambf_v1(n, size_of_bloom_filter_in_bytes, number_of_hash_functions, random_seed)` + + Magasins un [Filtre de Bloom](https://en.wikipedia.org/wiki/Bloom_filter) qui contient tous les ngrams d'un bloc de données. Fonctionne uniquement avec des chaînes. Peut être utilisé pour l'optimisation de `equals`, `like` et `in` expression. + + - `n` — ngram size, + - `size_of_bloom_filter_in_bytes` — Bloom filter size in bytes (you can use large values here, for example, 256 or 512, because it can be compressed well). + - `number_of_hash_functions` — The number of hash functions used in the Bloom filter. + - `random_seed` — The seed for Bloom filter hash functions. + +- `tokenbf_v1(size_of_bloom_filter_in_bytes, number_of_hash_functions, random_seed)` + + Le même que `ngrambf_v1`, mais stocke des jetons au lieu de ngrams. Les jetons sont des séquences séparées par des caractères non alphanumériques. + +- `bloom_filter([false_positive])` — Stores a [Filtre de Bloom](https://en.wikipedia.org/wiki/Bloom_filter) pour les colonnes spécifiées. + + Facultatif `false_positive` le paramètre est la probabilité de recevoir une réponse faussement positive du filtre. Valeurs possibles: (0, 1). Valeur par défaut: 0.025. + + Types de données pris en charge: `Int*`, `UInt*`, `Float*`, `Enum`, `Date`, `DateTime`, `String`, `FixedString`, `Array`, `LowCardinality`, `Nullable`. + + Les fonctions suivantes peuvent l'utiliser: [égal](../../query_language/functions/comparison_functions.md), [notEquals](../../query_language/functions/comparison_functions.md), [dans](../../query_language/functions/in_functions.md), [notIn](../../query_language/functions/in_functions.md), [avoir](../../query_language/functions/array_functions.md). + + + +``` sql +INDEX sample_index (u64 * length(s)) TYPE minmax GRANULARITY 4 +INDEX sample_index2 (u64 * length(str), i32 + f64 * 100, date, str) TYPE set(100) GRANULARITY 4 +INDEX sample_index3 (lower(str), str) TYPE ngrambf_v1(3, 256, 2, 0) GRANULARITY 4 +``` + +#### Les Fonctions De Soutien {#functions-support} + +Les Conditions dans le `WHERE` la clause contient des appels des fonctions qui fonctionnent avec des colonnes. Si la colonne fait partie d'un index, ClickHouse essaie d'utiliser cet index lors de l'exécution des fonctions. ClickHouse prend en charge différents sous-ensembles de fonctions pour l'utilisation d'index. + +Le `set` l'indice peut être utilisé avec toutes les fonctions. Les sous-ensembles de fonctions pour les autres index sont présentés dans le tableau ci-dessous. + +| Fonction (opérateur) / Indice de | clé primaire | minmax | ngrambf\_v1 | tokenbf\_v1 | bloom\_filter | +|------------------------------------------------------------------------------------------------------------|--------------|--------|-------------|-------------|---------------| +| [égal (=, ==)](../../query_language/functions/comparison_functions.md#function-equals) | ✔ | ✔ | ✔ | ✔ | ✔ | +| [notEquals (!= , \<\>)](../../query_language/functions/comparison_functions.md#function-notequals) | ✔ | ✔ | ✔ | ✔ | ✔ | +| [comme](../../query_language/functions/string_search_functions.md#function-like) | ✔ | ✔ | ✔ | ✗ | ✗ | +| [notLike](../../query_language/functions/string_search_functions.md#function-notlike) | ✔ | ✔ | ✔ | ✗ | ✗ | +| [startsWith](../../query_language/functions/string_functions.md#startswith) | ✔ | ✔ | ✔ | ✔ | ✗ | +| [endsWith](../../query_language/functions/string_functions.md#endswith) | ✗ | ✗ | ✔ | ✔ | ✗ | +| [multiSearchAny](../../query_language/functions/string_search_functions.md#function-multisearchany) | ✗ | ✗ | ✔ | ✗ | ✗ | +| [dans](../../query_language/functions/in_functions.md#in-functions) | ✔ | ✔ | ✔ | ✔ | ✔ | +| [notIn](../../query_language/functions/in_functions.md#in-functions) | ✔ | ✔ | ✔ | ✔ | ✔ | +| [peu (\<)](../../query_language/functions/comparison_functions.md#function-less) | ✔ | ✔ | ✗ | ✗ | ✗ | +| [grand (\>)](../../query_language/functions/comparison_functions.md#function-greater) | ✔ | ✔ | ✗ | ✗ | ✗ | +| [lessOrEquals (\<=)](../../query_language/functions/comparison_functions.md#function-lessorequals) | ✔ | ✔ | ✗ | ✗ | ✗ | +| [greaterOrEquals ( \> =)](../../query_language/functions/comparison_functions.md#function-greaterorequals) | ✔ | ✔ | ✗ | ✗ | ✗ | +| [vide](../../query_language/functions/array_functions.md#function-empty) | ✔ | ✔ | ✗ | ✗ | ✗ | +| [notEmpty](../../query_language/functions/array_functions.md#function-notempty) | ✔ | ✔ | ✗ | ✗ | ✗ | +| hasToken | ✗ | ✗ | ✗ | ✔ | ✗ | + +Les fonctions avec un argument constant inférieur à la taille ngram ne peuvent pas être utilisées par `ngrambf_v1` pour l'optimisation de la requête. + +Les filtres Bloom peuvent avoir des correspondances faussement positives, de sorte que le `ngrambf_v1`, `tokenbf_v1`, et `bloom_filter` les index ne peuvent pas être utilisés pour optimiser les requêtes où le résultat d'une fonction est censé être faux, par exemple: + +- Peut être optimisé: + - `s LIKE '%test%'` + - `NOT s NOT LIKE '%test%'` + - `s = 1` + - `NOT s != 1` + - `startsWith(s, 'test')` +- Ne peut pas être optimisé: + - `NOT s LIKE '%test%'` + - `s NOT LIKE '%test%'` + - `NOT s = 1` + - `s != 1` + - `NOT startsWith(s, 'test')` + +## Accès Simultané Aux Données {#concurrent-data-access} + +Pour l'accès aux tables simultanées, nous utilisons le multi-versioning. En d'autres termes, lorsqu'une table est lue et mise à jour simultanément, les données sont lues à partir d'un ensemble de parties en cours au moment de la requête. Il n'y a pas de longues mèches. Les Inserts ne gênent pas les opérations de lecture. + +Lecture à partir d'un tableau est automatiquement parallélisée. + +## TTL pour les colonnes et les tableaux {#table_engine-mergetree-ttl} + +Détermine la durée de vie de des valeurs. + +Le `TTL` clause peut être définie pour la table entière et pour chaque colonne individuelle. Ttl de niveau Table peut également spécifier la logique de déplacement automatique des données entre les disques et les volumes. + +Les Expressions doivent évaluer pour [Date](../../data_types/date.md) ou [DateTime](../../data_types/datetime.md) type de données. + +Exemple: + +``` sql +TTL time_column +TTL time_column + interval +``` + +Définir `interval`, utiliser [intervalle](../../query_language/operators.md#operators-datetime) opérateur. + +``` sql +TTL date_time + INTERVAL 1 MONTH +TTL date_time + INTERVAL 15 HOUR +``` + +### Colonne TTL {#mergetree-column-ttl} + +Lorsque les valeurs de la colonne expirent, ClickHouse les remplace par les valeurs par défaut du type de données de la colonne. Si toutes les valeurs de colonne de la partie données expirent, ClickHouse supprime cette colonne de la partie données d'un système de fichiers. + +Le `TTL` la clause ne peut pas être utilisée pour les colonnes clés. + +Exemple: + +Création d'une table avec TTL + +``` sql +CREATE TABLE example_table +( + d DateTime, + a Int TTL d + INTERVAL 1 MONTH, + b Int TTL d + INTERVAL 1 MONTH, + c String +) +ENGINE = MergeTree +PARTITION BY toYYYYMM(d) +ORDER BY d; +``` + +Ajout de TTL à une colonne d'une table existante + +``` sql +ALTER TABLE example_table + MODIFY COLUMN + c String TTL d + INTERVAL 1 DAY; +``` + +Modification de TTL de la colonne + +``` sql +ALTER TABLE example_table + MODIFY COLUMN + c String TTL d + INTERVAL 1 MONTH; +``` + +### Tableau TTL {#mergetree-table-ttl} + +Table peut avoir une expression pour la suppression de Lignes expirées, et plusieurs expressions pour le déplacement automatique de pièces entre [disques ou volumes](#table_engine-mergetree-multiple-volumes). Lorsque les lignes de la table expirent, ClickHouse supprime toutes les lignes correspondantes. Pour les pièces en mouvement, toutes les lignes d'une pièce doivent satisfaire aux critères d'expression de mouvement. + +``` sql +TTL expr [DELETE|TO DISK 'aaa'|TO VOLUME 'bbb'], ... +``` + +Type de règle TTL peut suivre chaque expression TTL. Il affecte une action qui doit être faite une fois que l'expression est satisfaite (atteint l'heure actuelle): + +- `DELETE` - supprimer les Lignes expirées (action par défaut); +- `TO DISK 'aaa'` - déplacer la partie sur le disque `aaa`; +- `TO VOLUME 'bbb'` - déplacer la partie sur le disque `bbb`. + +Exemple: + +Création d'une table avec TTL + +``` sql +CREATE TABLE example_table +( + d DateTime, + a Int +) +ENGINE = MergeTree +PARTITION BY toYYYYMM(d) +ORDER BY d +TTL d + INTERVAL 1 MONTH [DELETE], + d + INTERVAL 1 WEEK TO VOLUME 'aaa', + d + INTERVAL 2 WEEK TO DISK 'bbb'; +``` + +Modification de TTL de la table + +``` sql +ALTER TABLE example_table + MODIFY TTL d + INTERVAL 1 DAY; +``` + +**Suppression De Données** + +Les données avec un TTL expiré sont supprimées lorsque ClickHouse fusionne des parties de données. + +Lorsque ClickHouse voit que les données sont expirées, il effectue une fusion hors calendrier. Pour contrôler la fréquence de ces fusions, vous pouvez définir [merge\_with\_ttl\_timeout](#mergetree_setting-merge_with_ttl_timeout). Si la valeur est trop faible, il effectuera de nombreuses fusions hors calendrier qui peuvent consommer beaucoup de ressources. + +Si vous effectuez la `SELECT` requête entre les fusionne, vous pouvez obtenir des données expirées. Pour éviter cela, utilisez la [OPTIMIZE](../../query_language/misc.md#misc_operations-optimize) requête avant de l' `SELECT`. + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/mergetree/) + +## Utilisation de plusieurs périphériques de bloc pour le stockage de données {#table_engine-mergetree-multiple-volumes} + +### Introduction {#introduction} + +`MergeTree` les moteurs de table de famille peuvent stocker des données sur plusieurs périphériques de bloc. Par exemple, il peut être utile lorsque les données d'un tableau sont implicitement divisé en “hot” et “cold”. Les données les plus récentes sont régulièrement demandées mais ne nécessitent qu'une petite quantité d'espace. Au contraire, les données historiques à queue grasse sont rarement demandées. Si plusieurs disques sont disponibles, la “hot” les données peuvent être situées sur des disques rapides (par exemple, SSD NVMe ou en mémoire), tandis que le “cold” des données relativement lente (par exemple, disque dur). + +La partie de données est l'unité mobile minimum pour `MergeTree`-tables de moteur. Les données appartenant à une partie sont stockées sur un disque. Les parties de données peuvent être déplacées entre les disques en arrière-plan (selon les paramètres de l'utilisateur) ainsi qu'au moyen du [ALTER](../../query_language/alter.md#alter_move-partition) requête. + +### Terme {#terms} + +- Disk — Block device mounted to the filesystem. +- Default disk — Disk that stores the path specified in the [chemin](../server_settings/settings.md#server_settings-path) paramètre de serveur. +- Volume — Ordered set of equal disks (similar to [JBOD](https://en.wikipedia.org/wiki/Non-RAID_drive_architectures)). +- Storage policy — Set of volumes and the rules for moving data between them. + +Les noms donnés aux entités décrites peuvent être trouvés dans les tables système, [système.storage\_policies](../system_tables.md#system_tables-storage_policies) et [système.disque](../system_tables.md#system_tables-disks). Pour appliquer l'une des stratégies de stockage configurées pour une table, utilisez `storage_policy` réglage de `MergeTree`-moteur de table de famille. + +### Configuration {#table_engine-mergetree-multiple-volumes-configure} + +Les disques, les volumes et les stratégies de stockage doivent être déclarés `` étiquette, soit dans le fichier principal `config.xml` ou dans un fichier distinct dans le `config.d` répertoire. + +Structure de Configuration: + +``` xml + + + + /mnt/fast_ssd/clickhouse + + + /mnt/hdd1/clickhouse + 10485760 + + + /mnt/hdd2/clickhouse + 10485760 + + + ... + + + ... + +``` + +Balise: + +- `` — Disk name. Names must be different for all disks. +- `path` — path under which a server will store data (`data` et `shadow` des dossiers), doit être terminé par ‘/’. +- `keep_free_space_bytes` — the amount of free disk space to be reserved. + +L'ordre du disque définition n'est pas important. + +Stratégies de stockage balisage de configuration: + +``` xml + + ... + + + + + disk_name_from_disks_configuration + 1073741824 + + + + + + + 0.2 + + + + + + + + ... + +``` + +Balise: + +- `policy_name_N` — Policy name. Policy names must be unique. +- `volume_name_N` — Volume name. Volume names must be unique. +- `disk` — a disk within a volume. +- `max_data_part_size_bytes` — the maximum size of a part that can be stored on any of the volume's disks. +- `move_factor` — when the amount of available space gets lower than this factor, data automatically start to move on the next volume if any (by default, 0.1). + +Exemples de Cofiguration: + +``` xml + + ... + + + + + disk1 + disk2 + + + + + + + + fast_ssd + 1073741824 + + + disk1 + + + 0.2 + + + ... + +``` + +Dans l'exemple donné, la `hdd_in_order` politique met en œuvre les [round-robin](https://en.wikipedia.org/wiki/Round-robin_scheduling) approche. Ainsi cette politique ne définit qu'un seul volume (`single`), les parties des données sont stockées sur tous ses disques dans l'ordre circulaire. Une telle politique peut être très utile s'il y a plusieurs disques similaires sont montés sur le système, mais RAID N'est pas configuré. Gardez à l'esprit que chaque lecteur de disque n'est pas fiable et vous pouvez compenser avec facteur de réplication de 3 ou plus. + +S'il existe différents types de disques disponibles dans le système, `moving_from_ssd_to_hdd` la stratégie peut être utilisée à la place. Volume `hot` se compose d'un disque SSD (`fast_ssd`), et la taille maximale d'une pièce qui peut être stocké sur ce volume est de 1 go. Toutes les pièces avec la taille plus grande que 1 GB sera stocké directement sur le `cold` le volume, qui contient un disque dur de disque `disk1`. +Aussi, une fois le disque `fast_ssd` est complété par plus de 80%, les données seront transférées à la `disk1` par un processus d'arrière-plan. + +L'ordre d'énumération des volumes dans une stratégie de stockage est important. Une fois qu'un volume est surchargé, les données sont déplacées vers le suivant. L'ordre d'énumération des disques est important parce que les données sont stockées dans les virages. + +Lors de la création d'une table, on peut lui appliquer l'une des stratégies de stockage configurées: + +``` sql +CREATE TABLE table_with_non_default_policy ( + EventDate Date, + OrderID UInt64, + BannerID UInt64, + SearchPhrase String +) ENGINE = MergeTree +ORDER BY (OrderID, BannerID) +PARTITION BY toYYYYMM(EventDate) +SETTINGS storage_policy = 'moving_from_ssd_to_hdd' +``` + +Le `default` la Politique de stockage implique d'utiliser un seul volume, qui se compose d'un seul disque donné dans ``. Une fois qu'une table est créée, sa stratégie de stockage ne peut pas être modifiée. + +### Détail {#details} + +Dans le cas de `MergeTree` les tableaux, les données sont sur le disque de différentes façons: + +- En tant que résultat d'un insert (`INSERT` requête). +- En arrière-plan fusionne et [mutation](../../query_language/alter.md#alter-mutations). +- Lors du téléchargement à partir d'une autre réplique. +- À la suite du gel de la partition [ALTER TABLE … FREEZE PARTITION](../../query_language/alter.md#alter_freeze-partition). + +Dans tous ces cas, à l'exception des mutations et du gel de partition, une pièce est stockée sur un volume et un disque selon la Politique de stockage donnée: + +1. Le premier volume (dans l'ordre de définition) qui a suffisamment d'espace disque pour stocker une pièce (`unreserved_space > current_part_size`) et permet de stocker des pièces d'une taille donnée (`max_data_part_size_bytes > current_part_size`) est choisi. +2. Dans ce volume, ce disque est choisi qui suit celui, qui a été utilisé pour stocker le bloc de données précédent, et qui a de l'espace libre plus que la taille de la pièce (`unreserved_space - keep_free_space_bytes > current_part_size`). + +Sous le capot, les mutations et la congélation des cloisons utilisent [des liens en dur](https://en.wikipedia.org/wiki/Hard_link). Les liens durs entre différents disques ne sont pas pris en charge, donc dans de tels cas, les pièces résultantes sont stockées sur les mêmes disques que les disques initiaux. + +En arrière - plan, les pièces sont déplacées entre les volumes en fonction de la quantité d'espace libre (`move_factor` paramètre) selon l'ordre les volumes sont déclarées dans le fichier de configuration. +Les données ne sont jamais transférées du dernier et dans le premier. On peut utiliser des tables système [système.part\_log](../system_tables.md#system_tables-part-log) (champ `type = MOVE_PART`) et [système.partie](../system_tables.md#system_tables-parts) (Fields `path` et `disk`) pour surveiller l'arrière-plan se déplace. Aussi, les informations détaillées peuvent être trouvées dans les journaux du serveur. + +L'utilisateur peut forcer le déplacement d'une partie ou d'une partition d'un volume à l'autre à l'aide de la requête [ALTER TABLE … MOVE PART\|PARTITION … TO VOLUME\|DISK …](../../query_language/alter.md#alter_move-partition), toutes les restrictions pour les opérations de fond sont prises en compte. La requête initie un mouvement seul et n'attend pas que les opérations d'arrière-plan soient terminées. L'utilisateur recevra un message d'erreur si pas assez d'espace libre est disponible ou si l'une des conditions requises ne sont pas remplies. + +Le déplacement des données n'interfère pas avec la réplication des données. Par conséquent, différentes stratégies de stockage peuvent être spécifiées pour la même table sur différents réplicas. + +Après l'achèvement des fusions d'arrière-plan et des mutations, les anciennes parties ne sont supprimées qu'après un certain temps (`old_parts_lifetime`). +Pendant ce temps, ils ne sont pas déplacés vers d'autres volumes ou des disques. Par conséquent, jusqu'à ce que les pièces soient finalement supprimées, elles sont toujours prises en compte pour l'évaluation de l'espace disque occupé. + +[Article Original](https://clickhouse.tech/docs/ru/operations/table_engines/mergetree/) diff --git a/docs/fr/operations/table_engines/mysql.md b/docs/fr/operations/table_engines/mysql.md new file mode 100644 index 00000000000..1ae36126221 --- /dev/null +++ b/docs/fr/operations/table_engines/mysql.md @@ -0,0 +1,102 @@ +--- +machine_translated: true +--- + +# MySQL {#mysql} + +Le moteur MySQL vous permet d'effectuer `SELECT` requêtes sur les données stockées sur un serveur MySQL distant. + +## Création d'une Table {#creating-a-table} + +``` sql +CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] +( + name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1], + name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2], + ... +) ENGINE = MySQL('host:port', 'database', 'table', 'user', 'password'[, replace_query, 'on_duplicate_clause']); +``` + +Voir une description détaillée de la [CREATE TABLE](../../query_language/create.md#create-table-query) requête. + +La structure de la table peut différer de la structure de la table MySQL d'origine: + +- Les noms de colonnes doivent être les mêmes que dans la table MySQL d'origine, mais vous pouvez utiliser seulement certaines de ces colonnes et dans n'importe quel ordre. +- Les types de colonnes peuvent différer de ceux de la table MySQL d'origine. ClickHouse essaie de [jeter](../../query_language/functions/type_conversion_functions.md#type_conversion_function-cast) valeurs des types de données ClickHouse. + +**Les Paramètres Du Moteur** + +- `host:port` — MySQL server address. + +- `database` — Remote database name. + +- `table` — Remote table name. + +- `user` — MySQL user. + +- `password` — User password. + +- `replace_query` — Flag that converts `INSERT INTO` les requêtes de `REPLACE INTO`. Si `replace_query=1` la requête est substitué. + +- `on_duplicate_clause` — The `ON DUPLICATE KEY on_duplicate_clause` expression qui est ajoutée à la `INSERT` requête. + + Exemple: `INSERT INTO t (c1,c2) VALUES ('a', 2) ON DUPLICATE KEY UPDATE c2 = c2 + 1`, où `on_duplicate_clause` être `UPDATE c2 = c2 + 1`. Voir la [Documentation de MySQL](https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html) pour trouver lequel `on_duplicate_clause` vous pouvez utiliser avec le `ON DUPLICATE KEY` clause. + + Spécifier `on_duplicate_clause` vous avez besoin de passer `0` à l' `replace_query` paramètre. Si vous passez simultanément `replace_query = 1` et `on_duplicate_clause`, Clickhouse génère une exception. + +Simple `WHERE` des clauses telles que `=, !=, >, >=, <, <=` sont exécutés sur le serveur MySQL. + +Le reste des conditions et le `LIMIT` les contraintes d'échantillonnage sont exécutées dans ClickHouse uniquement après la fin de la requête à MySQL. + +## Exemple D'Utilisation {#usage-example} + +Table dans MySQL: + +``` text +mysql> CREATE TABLE `test`.`test` ( + -> `int_id` INT NOT NULL AUTO_INCREMENT, + -> `int_nullable` INT NULL DEFAULT NULL, + -> `float` FLOAT NOT NULL, + -> `float_nullable` FLOAT NULL DEFAULT NULL, + -> PRIMARY KEY (`int_id`)); +Query OK, 0 rows affected (0,09 sec) + +mysql> insert into test (`int_id`, `float`) VALUES (1,2); +Query OK, 1 row affected (0,00 sec) + +mysql> select * from test; ++--------+--------------+-------+----------------+ +| int_id | int_nullable | float | float_nullable | ++--------+--------------+-------+----------------+ +| 1 | NULL | 2 | NULL | ++--------+--------------+-------+----------------+ +1 row in set (0,00 sec) +``` + +Table dans ClickHouse, récupération des données de la table MySQL créée ci-dessus: + +``` sql +CREATE TABLE mysql_table +( + `float_nullable` Nullable(Float32), + `int_id` Int32 +) +ENGINE = MySQL('localhost:3306', 'test', 'test', 'bayonet', '123') +``` + +``` sql +SELECT * FROM mysql_table +``` + +``` text +┌─float_nullable─┬─int_id─┐ +│ ᴺᵁᴸᴸ │ 1 │ +└────────────────┴────────┘ +``` + +## Voir Aussi {#see-also} + +- [Le ‘mysql’ fonction de table](../../query_language/table_functions/mysql.md) +- [Utilisation de MySQL comme source de dictionnaire externe](../../query_language/dicts/external_dicts_dict_sources.md#dicts-external_dicts_dict_sources-mysql) + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/mysql/) diff --git a/docs/fr/operations/table_engines/null.md b/docs/fr/operations/table_engines/null.md new file mode 100644 index 00000000000..99e0a5c7126 --- /dev/null +++ b/docs/fr/operations/table_engines/null.md @@ -0,0 +1,11 @@ +--- +machine_translated: true +--- + +# NULL {#null} + +Lors de l'écriture dans une table Null, Les données sont ignorées. Lors de la lecture à partir d'une table Null, la réponse est vide. + +Toutefois, vous pouvez créer une vue matérialisée sur une table Nuls. Ainsi, les données écrites dans la table finira dans la vue. + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/null/) diff --git a/docs/fr/operations/table_engines/odbc.md b/docs/fr/operations/table_engines/odbc.md new file mode 100644 index 00000000000..f0433114ea1 --- /dev/null +++ b/docs/fr/operations/table_engines/odbc.md @@ -0,0 +1,129 @@ +--- +machine_translated: true +--- + +# ODBC {#table-engine-odbc} + +Permet à ClickHouse de se connecter à des bases de données externes via [ODBC](https://en.wikipedia.org/wiki/Open_Database_Connectivity). + +Pour implémenter en toute sécurité les connexions ODBC, ClickHouse utilise un programme distinct `clickhouse-odbc-bridge`. Si le pilote ODBC est chargé directement depuis `clickhouse-server`, les problèmes de pilote peuvent planter le serveur ClickHouse. Clickhouse démarre automatiquement `clickhouse-odbc-bridge` lorsque cela est nécessaire. Le programme ODBC bridge est installé à partir du même package que `clickhouse-server`. + +Ce moteur prend en charge le [Nullable](../../data_types/nullable.md) type de données. + +## Création d'une Table {#creating-a-table} + +``` sql +CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] +( + name1 [type1], + name2 [type2], + ... +) +ENGINE = ODBC(connection_settings, external_database, external_table) +``` + +Voir une description détaillée de la [CREATE TABLE](../../query_language/create.md#create-table-query) requête. + +La structure de la table peut différer de la structure de la table source: + +- Les noms de colonnes doivent être les mêmes que dans la table source, mais vous pouvez utiliser quelques-unes de ces colonnes et dans n'importe quel ordre. +- Les types de colonnes peuvent différer de ceux de la table source. ClickHouse essaie de [jeter](../../query_language/functions/type_conversion_functions.md#type_conversion_function-cast) valeurs des types de données ClickHouse. + +**Les Paramètres Du Moteur** + +- `connection_settings` — Name of the section with connection settings in the `odbc.ini` fichier. +- `external_database` — Name of a database in an external DBMS. +- `external_table` — Name of a table in the `external_database`. + +## Exemple D'Utilisation {#usage-example} + +**Récupération des données de L'installation MySQL locale via ODBC** + +Cet exemple est vérifié pour Ubuntu Linux 18.04 et MySQL server 5.7. + +Assurez-vous que unixODBC et MySQL Connector sont installés. + +Par défaut (si installé à partir de paquets), ClickHouse démarre en tant qu'utilisateur `clickhouse`. Ainsi, vous devez créer et configurer cet utilisateur dans le serveur MySQL. + +``` bash +$ sudo mysql +``` + +``` sql +mysql> CREATE USER 'clickhouse'@'localhost' IDENTIFIED BY 'clickhouse'; +mysql> GRANT ALL PRIVILEGES ON *.* TO 'clickhouse'@'clickhouse' WITH GRANT OPTION; +``` + +Puis configurez la connexion dans `/etc/odbc.ini`. + +``` bash +$ cat /etc/odbc.ini +[mysqlconn] +DRIVER = /usr/local/lib/libmyodbc5w.so +SERVER = 127.0.0.1 +PORT = 3306 +DATABASE = test +USERNAME = clickhouse +PASSWORD = clickhouse +``` + +Vous pouvez vérifier la connexion en utilisant le `isql` utilitaire de l'installation unixODBC. + +``` bash +$ isql -v mysqlconn ++---------------------------------------+ +| Connected! | +| | +... +``` + +Table dans MySQL: + +``` text +mysql> CREATE TABLE `test`.`test` ( + -> `int_id` INT NOT NULL AUTO_INCREMENT, + -> `int_nullable` INT NULL DEFAULT NULL, + -> `float` FLOAT NOT NULL, + -> `float_nullable` FLOAT NULL DEFAULT NULL, + -> PRIMARY KEY (`int_id`)); +Query OK, 0 rows affected (0,09 sec) + +mysql> insert into test (`int_id`, `float`) VALUES (1,2); +Query OK, 1 row affected (0,00 sec) + +mysql> select * from test; ++--------+--------------+-------+----------------+ +| int_id | int_nullable | float | float_nullable | ++--------+--------------+-------+----------------+ +| 1 | NULL | 2 | NULL | ++--------+--------------+-------+----------------+ +1 row in set (0,00 sec) +``` + +Table dans ClickHouse, récupération des données de la table MySQL: + +``` sql +CREATE TABLE odbc_t +( + `int_id` Int32, + `float_nullable` Nullable(Float32) +) +ENGINE = ODBC('DSN=mysqlconn', 'test', 'test') +``` + +``` sql +SELECT * FROM odbc_t +``` + +``` text +┌─int_id─┬─float_nullable─┐ +│ 1 │ ᴺᵁᴸᴸ │ +└────────┴────────────────┘ +``` + +## Voir Aussi {#see-also} + +- [Dictionnaires externes ODBC](../../query_language/dicts/external_dicts_dict_sources.md#dicts-external_dicts_dict_sources-odbc) +- [Fonction de table ODBC](../../query_language/table_functions/odbc.md) + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/odbc/) diff --git a/docs/fr/operations/table_engines/replacingmergetree.md b/docs/fr/operations/table_engines/replacingmergetree.md new file mode 100644 index 00000000000..c947dd51b42 --- /dev/null +++ b/docs/fr/operations/table_engines/replacingmergetree.md @@ -0,0 +1,66 @@ +--- +machine_translated: true +--- + +# ReplacingMergeTree {#replacingmergetree} + +Le moteur diffère de [MergeTree](mergetree.md#table_engines-mergetree) en ce qu'il supprime les doublons avec la même valeur de clé primaire (ou, plus précisément, avec la même [clé de tri](mergetree.md) valeur). + +La déduplication des données se produit uniquement lors d'une fusion. La fusion se produit en arrière-plan à un moment inconnu, vous ne pouvez donc pas le planifier. Certaines des données peuvent rester non traitées. Bien que vous puissiez exécuter une fusion imprévue en utilisant le `OPTIMIZE` requête, ne comptez pas l'utiliser, parce que la `OPTIMIZE` requête va lire et écrire une grande quantité de données. + +Ainsi, `ReplacingMergeTree` convient pour effacer les données en double en arrière-plan afin d'économiser de l'espace, mais cela ne garantit pas l'absence de doublons. + +## Création d'une Table {#creating-a-table} + +``` sql +CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] +( + name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1], + name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2], + ... +) ENGINE = ReplacingMergeTree([ver]) +[PARTITION BY expr] +[ORDER BY expr] +[PRIMARY KEY expr] +[SAMPLE BY expr] +[SETTINGS name=value, ...] +``` + +Pour une description des paramètres de requête, voir [demande de description](../../query_language/create.md). + +**ReplacingMergeTree Paramètres** + +- `ver` — column with version. Type `UInt*`, `Date` ou `DateTime`. Paramètre facultatif. + + Lors de la fusion, `ReplacingMergeTree` de toutes les lignes avec la même clé primaire ne laisse qu'un: + + - Dernier dans la sélection, si `ver` pas ensemble. + - Avec la version maximale, si `ver` défini. + +**Les clauses de requête** + +Lors de la création d'un `ReplacingMergeTree` la table de la même [clause](mergetree.md) sont nécessaires, comme lors de la création d'un `MergeTree` table. + +
+ +Méthode obsolète pour créer une Table + +!!! attention "Attention" + N'utilisez pas cette méthode dans les nouveaux projets et, si possible, remplacez les anciens projets par la méthode décrite ci-dessus. + +``` sql +CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] +( + name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1], + name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2], + ... +) ENGINE [=] ReplacingMergeTree(date-column [, sampling_expression], (primary, key), index_granularity, [ver]) +``` + +Tous les paramètres excepté `ver` ont la même signification que dans `MergeTree`. + +- `ver` - colonne avec la version. Paramètre facultatif. Pour une description, voir le texte ci-dessus. + +
+ +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/replacingmergetree/) diff --git a/docs/fr/operations/table_engines/replication.md b/docs/fr/operations/table_engines/replication.md new file mode 100644 index 00000000000..f3e485fceb9 --- /dev/null +++ b/docs/fr/operations/table_engines/replication.md @@ -0,0 +1,215 @@ +--- +machine_translated: true +--- + +# Réplication Des Données {#table_engines-replication} + +La réplication n'est prise en charge que pour les tables de la famille MergeTree: + +- ReplicatedMergeTree +- ReplicatedSummingMergeTree +- ReplicatedReplacingMergeTree +- ReplicatedAggregatingMergeTree +- ReplicatedCollapsingMergeTree +- ReplicatedVersionedCollapsingMergetree +- ReplicatedGraphiteMergeTree + +La réplication fonctionne au niveau d'une table individuelle, Pas du serveur entier. Un serveur peut stocker des tables répliquées et non répliquées en même temps. + +La réplication ne dépend pas de la fragmentation. Chaque fragment a sa propre réplication indépendante. + +Données compressées pour `INSERT` et `ALTER` les requêtes sont répliquées (pour plus d'informations, consultez la documentation de [ALTER](../../query_language/alter.md#query_language_queries_alter)). + +`CREATE`, `DROP`, `ATTACH`, `DETACH` et `RENAME` les requêtes sont exécutées sur un seul serveur et ne sont pas répliquées: + +- Le `CREATE TABLE` query crée une nouvelle table réplicable sur le serveur où la requête est exécutée. Si cette table existe déjà sur d'autres serveurs, il ajoute une nouvelle réplique. +- Le `DROP TABLE` requête supprime la réplique situé sur le serveur où l'exécution de la requête. +- Le `RENAME` requête renomme la table sur l'une des répliques. En d'autres termes, les tables répliquées peuvent avoir des noms différents sur différentes répliques. + +Clickhouse utilise [Apache ZooKeeper](https://zookeeper.apache.org) pour stocker des informations méta répliques. Utilisez ZooKeeper version 3.4.5 ou plus récente. + +Pour utiliser la réplication, définissez les paramètres [zookeeper](../server_settings/settings.md#server-settings_zookeeper) section de configuration du serveur. + +!!! attention "Attention" + Ne négligez pas la sécurité. Clickhouse soutient le `digest` [Schéma ACL](https://zookeeper.apache.org/doc/current/zookeeperProgrammers.html#sc_ZooKeeperAccessControl) du sous-système de sécurité ZooKeeper. + +Exemple de définition des adresses du cluster ZooKeeper: + +``` xml + + + example1 + 2181 + + + example2 + 2181 + + + example3 + 2181 + + +``` + +Vous pouvez spécifier N'importe quel cluster Zookeeper existant et le système utilisera un répertoire pour ses propres données (le répertoire est spécifié lors de la création d'une table réplicable). + +Si ZooKeeper n'est pas défini dans le fichier de configuration, vous ne pouvez pas créer de tables répliquées et toutes les tables répliquées existantes seront en lecture seule. + +La gardienne n'est pas utilisé dans `SELECT` requêtes car la réplication n'affecte pas les performances de `SELECT` et les requêtes s'exécutent aussi vite que pour les tables non répliquées. Lors de l'interrogation de tables répliquées distribuées, le comportement de ClickHouse est contrôlé par les paramètres [max\_replica\_delay\_for\_distributed\_queries](../settings/settings.md#settings-max_replica_delay_for_distributed_queries) et [fallback\_to\_stale\_replicas\_for\_distributed\_queries](../settings/settings.md#settings-fallback_to_stale_replicas_for_distributed_queries). + +Pour chaque `INSERT` requête, environ dix entrées sont ajoutées à ZooKeeper par le biais de plusieurs transactions. (Pour être plus précis, c'est pour chaque bloc de données inséré; une requête D'insertion contient un bloc ou un bloc par `max_insert_block_size = 1048576` rangée.) Cela conduit à des latences légèrement plus longues pour `INSERT` par rapport aux tables non répliquées. Mais si vous suivez les recommandations pour insérer des données dans des lots de pas plus d'un `INSERT` par seconde, cela ne crée aucun problème. L'ensemble du cluster clickhouse utilisé pour coordonner un cluster ZooKeeper a un total de plusieurs centaines `INSERTs` par seconde. Le débit sur les insertions de données (le nombre de lignes par seconde) est aussi élevé que pour les non-données répliquées. + +Pour les clusters très volumineux, vous pouvez utiliser différents clusters ZooKeeper pour différents fragments. Cependant, cela ne s'est pas avéré nécessaire sur le Yandex.Cluster Metrica (environ 300 serveurs). + +La réplication est asynchrone et multi-maître. `INSERT` les requêtes (ainsi que `ALTER`) peuvent être envoyés à n'importe quel serveur disponible. Les données sont insérées sur le serveur où la requête est exécutée, puis il est copié sur les autres serveurs. Comme il est asynchrone, les données récemment insérées apparaissent sur les autres répliques avec une certaine latence. Si une partie des répliques ne sont pas disponibles, les données sont écrites lorsqu'elles sont disponibles. Si une réplique est disponible, la latence correspond au temps nécessaire pour transférer le bloc de données compressées sur le réseau. + +Par défaut, une requête INSERT attend la confirmation de l'écriture des données à partir d'un seul réplica. Si les données ont été correctement écrit sur une seule réplique et le serveur avec cette réplique cesse d'exister, les données enregistrées seront perdues. Pour activer la confirmation des Écritures de données à partir de plusieurs réplicas, utilisez `insert_quorum` option. + +Chaque bloc de données est écrit de manière atomique. La requête D'insertion est divisée en blocs jusqu'à `max_insert_block_size = 1048576` rangée. En d'autres termes, si l' `INSERT` la requête a moins de 1048576 lignes, elle est faite de manière atomique. + +Les blocs de données sont dédupliquées. Pour plusieurs écritures du même bloc de données (blocs de données de même taille contenant les mêmes lignes dans le même ordre), le bloc n'est écrit qu'une seule fois. La raison en est en cas de défaillance du réseau lorsque l'application cliente ne sait pas si les données ont été écrites dans la base de données, de sorte que le `INSERT` requête peut simplement être répété. Peu importe à quelles insertions de réplica ont été envoyées avec des données identiques. `INSERTs` sont idempotents. Les paramètres de déduplication sont contrôlés par [merge\_tree](../server_settings/settings.md#server_settings-merge_tree) les paramètres du serveur. + +Pendant la réplication, seules les données source à insérer sont transférées sur le réseau. D'autres transformations de données (fusion) sont coordonnées et effectuées sur toutes les répliques de la même manière. Cela minimise l'utilisation du réseau, ce qui signifie que la réplication fonctionne bien lorsque les répliques résident dans différents centres de données. (Notez que la duplication de données dans différents centres de données est l'objectif principal de la réplication.) + +Vous pouvez avoir n'importe quel nombre de répliques des mêmes données. Yandex.Metrica utilise la double réplication en production. Chaque serveur utilise RAID-5 ou RAID-6, et RAID-10 dans certains cas. C'est une solution relativement fiable et pratique. + +Le système surveille la synchronicité des données sur les répliques et est capable de récupérer après une défaillance. Le basculement est automatique (pour les petites différences de données) ou semi-automatique (lorsque les données diffèrent trop, ce qui peut indiquer une erreur de configuration). + +## Création De Tables Répliquées {#creating-replicated-tables} + +Le `Replicated` le préfixe est ajouté au nom du moteur de table. Exemple:`ReplicatedMergeTree`. + +**Répliqué \* MergeTree paramètres** + +- `zoo_path` — The path to the table in ZooKeeper. +- `replica_name` — The replica name in ZooKeeper. + +Exemple: + +``` sql +CREATE TABLE table_name +( + EventDate DateTime, + CounterID UInt32, + UserID UInt32 +) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/table_name', '{replica}') +PARTITION BY toYYYYMM(EventDate) +ORDER BY (CounterID, EventDate, intHash32(UserID)) +SAMPLE BY intHash32(UserID) +``` + +
+ +Exemple de syntaxe obsolète + +``` sql +CREATE TABLE table_name +( + EventDate DateTime, + CounterID UInt32, + UserID UInt32 +) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/table_name', '{replica}', EventDate, intHash32(UserID), (CounterID, EventDate, intHash32(UserID), EventTime), 8192) +``` + +
+ +Comme le montre l'exemple, ces paramètres peuvent contenir des substitutions entre crochets. Les valeurs substituées sont tirées de la ‘macros’ section du fichier de configuration. Exemple: + +``` xml + + 05 + 02 + example05-02-1.yandex.ru + +``` + +Le chemin d'accès à la table dans ZooKeeper doit être unique pour chaque table répliquée. Les Tables sur différents fragments doivent avoir des chemins différents. +Dans ce cas, le chemin se compose des parties suivantes: + +`/clickhouse/tables/` est le préfixe commun. Nous vous recommandons d'utiliser exactement celui-ci. + +`{layer}-{shard}` est l'identificateur de fragment. Dans cet exemple, il se compose de deux parties, depuis l'Yandex.Le cluster Metrica utilise le sharding à deux niveaux. Pour la plupart des tâches, vous ne pouvez laisser que la substitution {shard}, qui sera étendue à l'Identificateur de partition. + +`table_name` est le nom du nœud de la table dans ZooKeeper. C'est une bonne idée de le rendre identique au nom de la table. Il est défini explicitement, car contrairement au nom de la table, il ne change pas après une requête de renommage. +*HINT*: vous pouvez ajouter un nom de base de données devant `table_name` Aussi. E. g. `db_name.table_name` + +Le nom du réplica identifie différentes réplicas de la même table. Vous pouvez utiliser le nom de serveur pour cela, comme dans l'exemple. Le nom doit seulement être unique dans chaque fragment. + +Vous pouvez définir les paramètres explicitement au lieu d'utiliser des substitutions. Cela peut être pratique pour tester et configurer de petits clusters. Cependant, vous ne pouvez pas utiliser de requêtes DDL distribuées (`ON CLUSTER`) dans ce cas. + +Lorsque vous travaillez avec de grands clusters, nous vous recommandons d'utiliser des substitutions car elles réduisent la probabilité d'erreur. + +Exécutez l' `CREATE TABLE` requête sur chaque réplique. Cette requête crée une nouvelle table répliquée, ou ajoute une nouvelle réplique à un existant. + +Si vous ajoutez une nouvelle réplique après que la table contient déjà des données sur d'autres répliques, les données seront copiées des autres répliques vers la nouvelle après l'exécution de la requête. En d'autres termes, la nouvelle réplique synchronise avec les autres. + +Pour supprimer une réplique, exécutez `DROP TABLE`. However, only one replica is deleted – the one that resides on the server where you run the query. + +## Récupération Après Des Échecs {#recovery-after-failures} + +Si ZooKeeper n'est pas disponible au démarrage d'un serveur, les tables répliquées passent en mode Lecture seule. Le système tente périodiquement de se connecter à ZooKeeper. + +Si ZooKeeper est indisponible pendant un `INSERT`, ou une erreur se produit lors de l'interaction avec ZooKeeper, une exception est levée. + +Après la connexion à ZooKeeper, le système vérifie si l'ensemble de données du système de fichiers local correspond à l'ensemble de données attendu (ZooKeeper stocke ces informations). S'il y a des incohérences mineures, le système les résout en synchronisant les données avec les répliques. + +Si le système détecte des parties de données brisées (avec la mauvaise taille des fichiers) ou des parties non reconnues (parties écrites dans le système de fichiers mais non enregistrées dans ZooKeeper), il les déplace vers le `detached` sous-répertoire (ils ne sont pas supprimés). Toutes les pièces manquantes sont copiées à partir des répliques. + +Notez que ClickHouse n'effectue aucune action destructrice telle que la suppression automatique d'une grande quantité de données. + +Lorsque le serveur démarre (ou établit une nouvelle session avec ZooKeeper), il vérifie uniquement la quantité et la taille de tous les fichiers. Si les tailles de fichier correspondent mais que les octets ont été modifiés quelque part au milieu, cela n'est pas détecté immédiatement, mais uniquement lorsque vous tentez de lire les données `SELECT` requête. La requête lève une exception concernant une somme de contrôle ou une taille non correspondante d'un bloc compressé. Dans ce cas, des parties de données sont ajoutées à la file d'attente de vérification et copiées à partir des répliques si nécessaire. + +Si la série de données diffère trop de celle attendue, un mécanisme de sécurité est déclenché. Le serveur entre cela dans le journal et refuse de lancer. La raison en est que ce cas peut indiquer une erreur de configuration, par exemple si une réplique sur un fragment a été accidentellement configurée comme une réplique sur un fragment différent. Cependant, les seuils pour ce mécanisme sont fixés assez bas, et cette situation peut se produire pendant la récupération normale de la défaillance. Dans ce cas, les données sont restaurées semi-automatiquement - par “pushing a button”. + +Pour démarrer la récupération, créez le nœud `/path_to_table/replica_name/flags/force_restore_data` dans ZooKeeper avec n'importe quel contenu, ou exécutez la commande pour restaurer toutes les tables répliquées: + +``` bash +sudo -u clickhouse touch /var/lib/clickhouse/flags/force_restore_data +``` + +Puis redémarrez le serveur. Au démarrage, le serveur supprime ces indicateurs et démarre la récupération. + +## Récupération Après La Perte De Données Complète {#recovery-after-complete-data-loss} + +Si toutes les données et métadonnées ont disparu de l'un des serveurs, procédez comme suit pour la récupération: + +1. Installez ClickHouse sur le serveur. Définissez correctement les substitutions dans le fichier de configuration qui contient l'Identificateur de fragment et les répliques, si vous les utilisez. +2. Si vous avez des tables non compliquées qui doivent être dupliquées manuellement sur les serveurs, copiez leurs données à partir d'un réplica (dans le répertoire `/var/lib/clickhouse/data/db_name/table_name/`). +3. Copier les définitions de table situées dans `/var/lib/clickhouse/metadata/` à partir d'une réplique. Si un identificateur de fragment ou de réplica est défini explicitement dans les définitions de table, corrigez-le de manière à ce qu'il corresponde à ce réplica. (Alternativement, démarrez le serveur et faites tous les `ATTACH TABLE` les requêtes qui auraient dû être dans les .les fichiers sql dans `/var/lib/clickhouse/metadata/`.) +4. Pour démarrer la récupération, créez le nœud ZooKeeper `/path_to_table/replica_name/flags/force_restore_data` tout contenu, ou d'exécuter la commande pour restaurer toutes les tables répliquées: `sudo -u clickhouse touch /var/lib/clickhouse/flags/force_restore_data` + +Ensuite, démarrez le serveur (redémarrez, s'il est déjà en cours d'exécution). Les données seront téléchargées à partir de répliques. + +Une autre option de récupération consiste à supprimer des informations sur la réplique perdue de ZooKeeper (`/path_to_table/replica_name`), puis créez à nouveau la réplique comme décrit dans “[Création de tables répliquées](#creating-replicated-tables)”. + +Il n'y a aucune restriction sur la bande passante réseau pendant la récupération. Gardez cela à l'esprit si vous restaurez de nombreuses répliques à la fois. + +## Conversion de MergeTree en ReplicatedMergeTree {#converting-from-mergetree-to-replicatedmergetree} + +Nous utilisons le terme `MergeTree` pour consulter tous les moteurs de la `MergeTree family` le même que pour `ReplicatedMergeTree`. + +Si vous avez eu une `MergeTree` table qui a été répliquée manuellement, vous pouvez le convertir en une table répliquée. Vous devrez peut-être le faire si vous avez déjà recueilli une grande quantité de données dans un `MergeTree` table et maintenant vous voulez activer la réplication. + +Si les données diffèrent sur différentes répliques, synchronisez-les d'abord ou supprimez-les sur toutes les répliques sauf une. + +Renommez la table mergetree existante, puis créez un `ReplicatedMergeTree` table avec l'ancien nom. +Déplacez les données de l'ancienne table vers `detached` sous-répertoire à l'intérieur du répertoire avec les nouvelles données de la table (`/var/lib/clickhouse/data/db_name/table_name/`). +Ensuite, exécutez `ALTER TABLE ATTACH PARTITION` sur l'une des répliques d'ajouter ces données à des parties de l'ensemble de travail. + +## Conversion de ReplicatedMergeTree en MergeTree {#converting-from-replicatedmergetree-to-mergetree} + +Créez une table MergeTree avec un nom différent. Déplacez toutes les données du répertoire avec le `ReplicatedMergeTree` données de la table dans le répertoire de données de la nouvelle table. Ensuite, supprimer le `ReplicatedMergeTree` table et redémarrez le serveur. + +Si vous voulez vous débarrasser d'un `ReplicatedMergeTree` table sans lancer le serveur: + +- Supprimer la `.sql` fichier dans le répertoire de métadonnées (`/var/lib/clickhouse/metadata/`). +- Supprimer le chemin correspondant dans ZooKeeper (`/path_to_table/replica_name`). + +Après cela, vous pouvez lancer le serveur, créer un `MergeTree` tableau, déplacer les données de son répertoire, puis redémarrez le serveur. + +## Récupération lorsque les métadonnées du Cluster ZooKeeper sont perdues ou endommagées {#recovery-when-metadata-in-the-zookeeper-cluster-is-lost-or-damaged} + +Si les données de ZooKeeper ont été perdues ou endommagées, vous pouvez les enregistrer en les déplaçant dans une table non compliquée comme décrit ci-dessus. + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/replication/) diff --git a/docs/fr/operations/table_engines/set.md b/docs/fr/operations/table_engines/set.md new file mode 100644 index 00000000000..f564f146499 --- /dev/null +++ b/docs/fr/operations/table_engines/set.md @@ -0,0 +1,16 @@ +--- +machine_translated: true +--- + +# Définir {#set} + +Un ensemble de données qui est toujours en RAM. Il est conçu pour être utilisé sur le côté droit de l'opérateur (voir la section “IN operators”). + +Vous pouvez utiliser INSERT pour insérer des données dans la table. De nouveaux éléments seront ajoutés à l'ensemble de données, tandis que les doublons seront ignorés. +Mais vous ne pouvez pas effectuer SELECT à partir de la table. La seule façon de récupérer des données est en l'utilisant dans la moitié droite de l'opérateur. + +Les données sont toujours situées dans la RAM. Pour INSERT, les blocs de données insérées sont également écrits dans le répertoire des tables sur le disque. Lors du démarrage du serveur, ces données sont chargées dans la RAM. En d'autres termes, après le redémarrage, les données restent en place. + +Pour un redémarrage brutal du serveur, le bloc de données sur le disque peut être perdu ou endommagé. Dans ce dernier cas, vous devrez peut-être supprimer manuellement le fichier contenant des données endommagées. + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/set/) diff --git a/docs/fr/operations/table_engines/stripelog.md b/docs/fr/operations/table_engines/stripelog.md new file mode 100644 index 00000000000..969569c139b --- /dev/null +++ b/docs/fr/operations/table_engines/stripelog.md @@ -0,0 +1,92 @@ +--- +machine_translated: true +--- + +# StripeLog {#stripelog} + +Ce moteur appartient à la famille des moteurs en rondins. Voir les propriétés communes des moteurs de journal et leurs différences dans le [Famille De Moteurs En Rondins](log_family.md) article. + +Utilisez ce moteur dans des scénarios lorsque vous devez écrire de nombreuses tables avec une petite quantité de données (moins de 1 million de lignes). + +## Création d'une Table {#table_engines-stripelog-creating-a-table} + +``` sql +CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] +( + column1_name [type1] [DEFAULT|MATERIALIZED|ALIAS expr1], + column2_name [type2] [DEFAULT|MATERIALIZED|ALIAS expr2], + ... +) ENGINE = StripeLog +``` + +Voir la description détaillée de la [CREATE TABLE](../../query_language/create.md#create-table-query) requête. + +## L'écriture des Données {#table_engines-stripelog-writing-the-data} + +Le `StripeLog` moteur stocke toutes les colonnes dans un fichier. Pour chaque `INSERT` requête, ClickHouse ajoute le bloc de données à la fin d'un fichier de table, en écrivant des colonnes une par une. + +Pour chaque table ClickHouse écrit les fichiers: + +- `data.bin` — Data file. +- `index.mrk` — File with marks. Marks contain offsets for each column of each data block inserted. + +Le `StripeLog` moteur ne prend pas en charge la `ALTER UPDATE` et `ALTER DELETE` opérations. + +## La lecture des Données {#table_engines-stripelog-reading-the-data} + +Le fichier avec des marques permet à ClickHouse de paralléliser la lecture des données. Cela signifie qu'une `SELECT` la requête renvoie des lignes dans un ordre imprévisible. L'utilisation de la `ORDER BY` clause pour trier les lignes. + +## Exemple D'utilisation {#table_engines-stripelog-example-of-use} + +Création d'une table: + +``` sql +CREATE TABLE stripe_log_table +( + timestamp DateTime, + message_type String, + message String +) +ENGINE = StripeLog +``` + +Insertion de données: + +``` sql +INSERT INTO stripe_log_table VALUES (now(),'REGULAR','The first regular message') +INSERT INTO stripe_log_table VALUES (now(),'REGULAR','The second regular message'),(now(),'WARNING','The first warning message') +``` + +Nous avons utilisé deux `INSERT` requêtes pour créer deux blocs de données `data.bin` fichier. + +ClickHouse utilise plusieurs threads lors de la sélection des données. Chaque thread lit un bloc de données séparé et renvoie les lignes résultantes indépendamment à la fin. En conséquence, l'ordre des blocs de lignes dans le résultat ne correspond pas à l'ordre des mêmes blocs dans l'entrée, dans la plupart des cas. Exemple: + +``` sql +SELECT * FROM stripe_log_table +``` + +``` text +┌───────────timestamp─┬─message_type─┬─message────────────────────┐ +│ 2019-01-18 14:27:32 │ REGULAR │ The second regular message │ +│ 2019-01-18 14:34:53 │ WARNING │ The first warning message │ +└─────────────────────┴──────────────┴────────────────────────────┘ +┌───────────timestamp─┬─message_type─┬─message───────────────────┐ +│ 2019-01-18 14:23:43 │ REGULAR │ The first regular message │ +└─────────────────────┴──────────────┴───────────────────────────┘ +``` + +Trier les résultats (ordre croissant par défaut): + +``` sql +SELECT * FROM stripe_log_table ORDER BY timestamp +``` + +``` text +┌───────────timestamp─┬─message_type─┬─message────────────────────┐ +│ 2019-01-18 14:23:43 │ REGULAR │ The first regular message │ +│ 2019-01-18 14:27:32 │ REGULAR │ The second regular message │ +│ 2019-01-18 14:34:53 │ WARNING │ The first warning message │ +└─────────────────────┴──────────────┴────────────────────────────┘ +``` + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/stripelog/) diff --git a/docs/fr/operations/table_engines/summingmergetree.md b/docs/fr/operations/table_engines/summingmergetree.md new file mode 100644 index 00000000000..098a51a6408 --- /dev/null +++ b/docs/fr/operations/table_engines/summingmergetree.md @@ -0,0 +1,138 @@ +--- +machine_translated: true +--- + +# SummingMergeTree {#summingmergetree} + +Le moteur hérite de [MergeTree](mergetree.md#table_engines-mergetree). La différence est que lors de la fusion de parties de données pour `SummingMergeTree` tables ClickHouse remplace toutes les lignes avec la même clé primaire (ou, plus précisément, avec la même [clé de tri](mergetree.md)) avec une ligne qui contient des valeurs résumées pour les colonnes avec le type de données numériques. Si la clé de tri est composée de telle sorte qu'une seule valeur de clé correspond à un grand nombre de lignes, cela réduit considérablement le volume de stockage et accélère la sélection des données. + +Nous vous recommandons d'utiliser le moteur avec `MergeTree`. Stocker des données complètes dans `MergeTree` table, et l'utilisation `SummingMergeTree` pour le stockage de données agrégées, par exemple, lors de la préparation de rapports. Une telle approche vous empêchera de perdre des données précieuses en raison d'une clé primaire mal composée. + +## Création d'une Table {#creating-a-table} + +``` sql +CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] +( + name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1], + name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2], + ... +) ENGINE = SummingMergeTree([columns]) +[PARTITION BY expr] +[ORDER BY expr] +[SAMPLE BY expr] +[SETTINGS name=value, ...] +``` + +Pour une description des paramètres de requête, voir [demande de description](../../query_language/create.md). + +**Paramètres de SummingMergeTree** + +- `columns` - un n-uplet avec les noms de colonnes où les valeurs seront résumées. Paramètre facultatif. + Les colonnes doivent être d'un type numérique et ne doit pas être dans la clé primaire. + + Si `columns` non spécifié, ClickHouse résume les valeurs dans toutes les colonnes avec un type de données numérique qui ne sont pas dans la clé primaire. + +**Les clauses de requête** + +Lors de la création d'un `SummingMergeTree` la table de la même [clause](mergetree.md) sont nécessaires, comme lors de la création d'un `MergeTree` table. + +
+ +Méthode obsolète pour créer une Table + +!!! attention "Attention" + N'utilisez pas cette méthode dans les nouveaux projets et, si possible, remplacez les anciens projets par la méthode décrite ci-dessus. + +``` sql +CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] +( + name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1], + name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2], + ... +) ENGINE [=] SummingMergeTree(date-column [, sampling_expression], (primary, key), index_granularity, [columns]) +``` + +Tous les paramètres excepté `columns` ont la même signification que dans `MergeTree`. + +- `columns` — tuple with names of columns values of which will be summarized. Optional parameter. For a description, see the text above. + +
+ +## Exemple D'Utilisation {#usage-example} + +Considérons le tableau suivant: + +``` sql +CREATE TABLE summtt +( + key UInt32, + value UInt32 +) +ENGINE = SummingMergeTree() +ORDER BY key +``` + +Insérer des données: + +``` sql +INSERT INTO summtt Values(1,1),(1,2),(2,1) +``` + +ClickHouse peut résumer toutes les lignes pas complètement ([voir ci-dessous](#data-processing)), nous utilisons donc une fonction d'agrégation `sum` et `GROUP BY` la clause dans la requête. + +``` sql +SELECT key, sum(value) FROM summtt GROUP BY key +``` + +``` text +┌─key─┬─sum(value)─┐ +│ 2 │ 1 │ +│ 1 │ 3 │ +└─────┴────────────┘ +``` + +## Le Traitement Des Données {#data-processing} + +Lorsque les données sont insérées dans une table, elles sont enregistrées telles quelles. Clickhouse fusionne périodiquement les parties de données insérées et c'est à ce moment que les lignes avec la même clé primaire sont additionnées et remplacées par une pour chaque partie de données résultante. + +ClickHouse can merge the data parts so that different resulting parts of data cat consist rows with the same primary key, i.e. the summation will be incomplete. Therefore (`SELECT`) une fonction d'agrégation [somme()](../../query_language/agg_functions/reference.md#agg_function-sum) et `GROUP BY` la clause doit être utilisé dans une requête comme décrit dans l'exemple ci-dessus. + +### Règles communes pour la sommation {#common-rules-for-summation} + +Les valeurs dans les colonnes avec le type de données numériques sont résumées. L'ensemble des colonnes est défini par le paramètre `columns`. + +Si les valeurs étaient 0 dans toutes les colonnes pour la sommation, la ligne est supprimée. + +Si la colonne n'est pas dans la clé primaire et n'est pas résumée, une valeur arbitraire est sélectionnée parmi celles existantes. + +Les valeurs ne sont pas résumés des colonnes de la clé primaire. + +### La somme dans les colonnes AggregateFunction {#the-summation-in-the-aggregatefunction-columns} + +Pour les colonnes de [Type AggregateFunction](../../data_types/nested_data_structures/aggregatefunction.md) ClickHouse se comporte comme [AggregatingMergeTree](aggregatingmergetree.md) moteur d'agrégation selon la fonction. + +### Structures Imbriquées {#nested-structures} + +Table peut avoir des structures de données imbriquées qui sont traitées d'une manière spéciale. + +Si le nom d'une table imbriquée se termine avec `Map` et il contient au moins deux colonnes qui répondent aux critères suivants: + +- la première colonne est numérique `(*Int*, Date, DateTime)` ou une chaîne de caractères `(String, FixedString)`, nous allons l'appeler `key`, +- les autres colonnes sont arithmétique `(*Int*, Float32/64)`, nous allons l'appeler `(values...)`, + +ensuite, cette table imbriquée est interprétée comme un mappage de `key => (values...)` et lors de la fusion de ses lignes, les éléments de deux ensembles de données sont regroupées par `key` avec une sommation du correspondant `(values...)`. + +Exemple: + +``` text +[(1, 100)] + [(2, 150)] -> [(1, 100), (2, 150)] +[(1, 100)] + [(1, 150)] -> [(1, 250)] +[(1, 100)] + [(1, 150), (2, 150)] -> [(1, 250), (2, 150)] +[(1, 100), (2, 150)] + [(1, -100)] -> [(2, 150)] +``` + +Lorsque vous demandez des données, utilisez [sumMap (clé, valeur)](../../query_language/agg_functions/reference.md) fonction pour l'agrégation de `Map`. + +Pour la structure de données imbriquée, vous n'avez pas besoin de spécifier ses colonnes dans le tuple de colonnes pour la sommation. + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/summingmergetree/) diff --git a/docs/fr/operations/table_engines/tinylog.md b/docs/fr/operations/table_engines/tinylog.md new file mode 100644 index 00000000000..d2f528e07ac --- /dev/null +++ b/docs/fr/operations/table_engines/tinylog.md @@ -0,0 +1,13 @@ +--- +machine_translated: true +--- + +# TinyLog {#tinylog} + +Le moteur appartient à la famille de moteurs en rondins. Voir [Famille De Moteurs En Rondins](log_family.md) pour les propriétés communes des moteurs en rondins et leurs différences. + +Ce moteur de table est généralement utilisé avec la méthode write-once: écrivez des données une fois, puis lisez-les autant de fois que nécessaire. Par exemple, vous pouvez utiliser `TinyLog`- tapez des tables pour les données intermédiaires qui sont traitées en petits lots. Notez que le stockage des données dans un grand nombre de petites tables est inefficace. + +Les requêtes sont exécutées dans un flux unique. En d'autres termes, ce moteur est destiné à des tables relativement petites (jusqu'à environ 1 000 000 de lignes). Il est logique d'utiliser ce moteur de table si vous avez beaucoup de petites tables, car il est plus simple que le [Journal](log.md) moteur (moins de fichiers doivent être ouverts). + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/tinylog/) diff --git a/docs/fr/operations/table_engines/url.md b/docs/fr/operations/table_engines/url.md new file mode 100644 index 00000000000..a7b58c4ad5d --- /dev/null +++ b/docs/fr/operations/table_engines/url.md @@ -0,0 +1,79 @@ +--- +machine_translated: true +--- + +# URL (URL, Format) {#table_engines-url} + +Gère les données sur un serveur HTTP / HTTPS distant. Ce moteur est similaire +à l' [Fichier](file.md) moteur. + +## Utilisation du moteur dans le serveur ClickHouse {#using-the-engine-in-the-clickhouse-server} + +Le `format` doit être celui que ClickHouse peut utiliser dans +`SELECT` les requêtes et, si nécessaire, en `INSERTs`. Pour la liste complète des formats pris en charge, voir +[Format](../../interfaces/formats.md#formats). + +Le `URL` doit être conforme à la structure D'un Localisateur de ressources uniforme. L'URL spécifiée doit pointer vers un serveur +qui utilise le protocole HTTP ou HTTPS. Cela ne nécessite pas de +en-têtes supplémentaires pour obtenir une réponse du serveur. + +`INSERT` et `SELECT` les requêtes sont transformées en `POST` et `GET` demande, +respectivement. Pour le traitement `POST` demandes, le serveur distant doit prendre en charge +[Encodage de transfert en morceaux](https://en.wikipedia.org/wiki/Chunked_transfer_encoding). + +Vous pouvez limiter le nombre maximal de sauts de redirection HTTP GET en utilisant [max\_http\_get\_redirects](../settings/settings.md#setting-max_http_get_redirects) paramètre. + +**Exemple:** + +**1.** Créer un `url_engine_table` table sur le serveur : + +``` sql +CREATE TABLE url_engine_table (word String, value UInt64) +ENGINE=URL('http://127.0.0.1:12345/', CSV) +``` + +**2.** Créez un serveur HTTP de base à l'aide des outils Python 3 standard et +démarrer: + +``` python3 +from http.server import BaseHTTPRequestHandler, HTTPServer + +class CSVHTTPServer(BaseHTTPRequestHandler): + def do_GET(self): + self.send_response(200) + self.send_header('Content-type', 'text/csv') + self.end_headers() + + self.wfile.write(bytes('Hello,1\nWorld,2\n', "utf-8")) + +if __name__ == "__main__": + server_address = ('127.0.0.1', 12345) + HTTPServer(server_address, CSVHTTPServer).serve_forever() +``` + +``` bash +$ python3 server.py +``` + +**3.** Les données de la demande: + +``` sql +SELECT * FROM url_engine_table +``` + +``` text +┌─word──┬─value─┐ +│ Hello │ 1 │ +│ World │ 2 │ +└───────┴───────┘ +``` + +## Les détails de mise en Œuvre {#details-of-implementation} + +- Les lectures et les écritures peuvent être parallèles +- Pas pris en charge: + - `ALTER` et `SELECT...SAMPLE` opérations. + - Index. + - Réplication. + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/url/) diff --git a/docs/fr/operations/table_engines/versionedcollapsingmergetree.md b/docs/fr/operations/table_engines/versionedcollapsingmergetree.md new file mode 100644 index 00000000000..dadd4b42858 --- /dev/null +++ b/docs/fr/operations/table_engines/versionedcollapsingmergetree.md @@ -0,0 +1,235 @@ +--- +machine_translated: true +--- + +# VersionedCollapsingMergeTree {#versionedcollapsingmergetree} + +Ce moteur: + +- Permet l'écriture rapide des États d'objet qui changent continuellement. +- Supprime les anciens États d'objets en arrière-plan. Cela réduit considérablement le volume de stockage. + +Voir la section [Effondrer](#table_engines_versionedcollapsingmergetree) pour plus de détails. + +Le moteur hérite de [MergeTree](mergetree.md#table_engines-mergetree) et ajoute la logique de réduction des lignes à l'algorithme de fusion des parties de données. `VersionedCollapsingMergeTree` sert le même but que [CollapsingMergeTree](collapsingmergetree.md) mais utilise un autre effondrement algorithme qui permet d'insérer les données dans n'importe quel ordre avec plusieurs threads. En particulier, l' `Version` la colonne aide à réduire correctement les lignes même si elles sont insérées dans le mauvais ordre. Contrairement, `CollapsingMergeTree` permet uniquement une insertion strictement consécutive. + +## Création d'une Table {#creating-a-table} + +``` sql +CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] +( + name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1], + name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2], + ... +) ENGINE = VersionedCollapsingMergeTree(sign, version) +[PARTITION BY expr] +[ORDER BY expr] +[SAMPLE BY expr] +[SETTINGS name=value, ...] +``` + +Pour une description des paramètres de requête, voir les [description de la requête](../../query_language/create.md). + +**Les Paramètres Du Moteur** + +``` sql +VersionedCollapsingMergeTree(sign, version) +``` + +- `sign` — Name of the column with the type of row: `1` est un “state” rangée, `-1` est un “cancel” rangée. + + Le type de données de colonne doit être `Int8`. + +- `version` — Name of the column with the version of the object state. + + Le type de données de colonne doit être `UInt*`. + +**Les Clauses De Requête** + +Lors de la création d'un `VersionedCollapsingMergeTree` de table, de la même [clause](mergetree.md) sont requis lors de la création d'un `MergeTree` table. + +
+ +Méthode obsolète pour créer une Table + +!!! attention "Attention" + N'utilisez pas cette méthode dans les nouveaux projets. Si possible, passer les anciens projets à la méthode décrite ci-dessus. + +``` sql +CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] +( + name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1], + name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2], + ... +) ENGINE [=] VersionedCollapsingMergeTree(date-column [, sampling_expression], (primary, key), index_granularity, sign, version) +``` + +Tous les paramètres, à l'exception `sign` et `version` ont la même signification que dans `MergeTree`. + +- `sign` — Name of the column with the type of row: `1` est un “state” rangée, `-1` est un “cancel” rangée. + + Column Data Type — `Int8`. + +- `version` — Name of the column with the version of the object state. + + Le type de données de colonne doit être `UInt*`. + +
+ +## Effondrer {#table_engines-versionedcollapsingmergetree} + +### Données {#data} + +Considérez une situation où vous devez enregistrer des données en constante évolution pour un objet. Il est raisonnable d'avoir une ligne pour un objet et de mettre à jour la ligne chaque fois qu'il y a des modifications. Cependant, l'opération de mise à jour est coûteuse et lente pour un SGBD car elle nécessite la réécriture des données dans le stockage. La mise à jour n'est pas acceptable si vous devez écrire des données rapidement, mais vous pouvez écrire les modifications sur un objet de manière séquentielle comme suit. + +L'utilisation de la `Sign` colonne lors de l'écriture de la ligne. Si `Sign = 1` cela signifie que la ligne est un état d'un objet (appelons-la “state” rangée). Si `Sign = -1` il indique l'annulation de l'état d'un objet avec les mêmes attributs (appelons-la “cancel” rangée). Également utiliser l' `Version` colonne, qui doit identifier chaque état d'un objet avec un numéro distinct. + +Par exemple, nous voulons calculer le nombre de pages visitées sur le site et combien de temps ils étaient là. À un moment donné nous écrivons la ligne suivante avec l'état de l'activité de l'utilisateur: + +``` text +┌──────────────UserID─┬─PageViews─┬─Duration─┬─Sign─┬─Version─┐ +│ 4324182021466249494 │ 5 │ 146 │ 1 │ 1 | +└─────────────────────┴───────────┴──────────┴──────┴─────────┘ +``` + +À un moment donné, nous enregistrons le changement d'activité de l'utilisateur et l'écrivons avec les deux lignes suivantes. + +``` text +┌──────────────UserID─┬─PageViews─┬─Duration─┬─Sign─┬─Version─┐ +│ 4324182021466249494 │ 5 │ 146 │ -1 │ 1 | +│ 4324182021466249494 │ 6 │ 185 │ 1 │ 2 | +└─────────────────────┴───────────┴──────────┴──────┴─────────┘ +``` + +La première ligne annule le précédent état de l'objet (utilisateur). Il doit copier tous les champs de l'état annulé sauf `Sign`. + +La deuxième ligne contient l'état actuel. + +Parce que nous avons besoin seulement le dernier état de l'activité de l'utilisateur, les lignes + +``` text +┌──────────────UserID─┬─PageViews─┬─Duration─┬─Sign─┬─Version─┐ +│ 4324182021466249494 │ 5 │ 146 │ 1 │ 1 | +│ 4324182021466249494 │ 5 │ 146 │ -1 │ 1 | +└─────────────────────┴───────────┴──────────┴──────┴─────────┘ +``` + +peut être supprimé, réduisant l'état invalide (ancien) de l'objet. `VersionedCollapsingMergeTree` fait cela lors de la fusion des parties de données. + +Pour savoir pourquoi nous avons besoin de deux lignes pour chaque changement, voir [Algorithme](#table_engines-versionedcollapsingmergetree-algorithm). + +**Notes sur l'Utilisation de la** + +1. Le programme qui écrit les données devraient se souvenir de l'état d'un objet afin de l'annuler. Le “cancel” chaîne doit être une copie de la “state” chaîne avec le contraire `Sign`. Cela augmente la taille initiale de stockage, mais permet d'écrire les données rapidement. +2. Les tableaux de plus en plus longs dans les colonnes réduisent l'efficacité du moteur en raison de la charge d'écriture. Plus les données sont simples, meilleure est l'efficacité. +3. `SELECT` les résultats dépendent fortement de la cohérence de l'histoire de l'objet change. Être précis lors de la préparation des données pour l'insertion. Vous pouvez obtenir des résultats imprévisibles avec des données incohérentes, telles que des valeurs négatives pour des métriques non négatives telles que la profondeur de session. + +### Algorithme {#table_engines-versionedcollapsingmergetree-algorithm} + +Lorsque ClickHouse fusionne des parties de données, il supprime chaque paire de lignes ayant la même clé primaire et la même version et différentes `Sign`. L'ordre des lignes n'a pas d'importance. + +Lorsque ClickHouse insère des données, il ordonne les lignes par la clé primaire. Si l' `Version` la colonne n'est pas dans la clé primaire, ClickHouse ajoute à la clé primaire implicitement que le dernier champ et l'utilise pour la commande. + +## La Sélection De Données {#selecting-data} + +ClickHouse ne garantit pas que toutes les lignes avec la même clé primaire sera dans la même partie des données ou même sur le même serveur physique. Cela est vrai à la fois pour l'écriture des données et pour la fusion ultérieure des parties de données. En outre, les processus ClickHouse `SELECT` requêtes avec plusieurs threads, et il ne peut pas prédire l'ordre des lignes dans le résultat. Cela signifie que le regroupement est nécessaire s'il est nécessaire pour obtenir complètement “collapsed” données à partir d'un `VersionedCollapsingMergeTree` table. + +Pour finaliser la réduction, écrivez une requête avec un `GROUP BY` fonctions de clause et d'agrégation qui tiennent compte du signe. Par exemple, pour calculer la quantité, l'utilisation `sum(Sign)` plutôt `count()`. Pour calculer la somme de quelque chose, utilisez `sum(Sign * x)` plutôt `sum(x)` et d'ajouter `HAVING sum(Sign) > 0`. + +Aggregate `count`, `sum` et `avg` peut être calculée de cette manière. Aggregate `uniq` peut être calculé si un objet a au moins un non-état effondré. Aggregate `min` et `max` ne peut pas être calculé, car `VersionedCollapsingMergeTree` ne sauvegarde pas l'historique des valeurs des États réduits. + +Si vous avez besoin d'extraire les données avec “collapsing” mais sans agrégation (par exemple, pour vérifier si des lignes sont présentes dont les valeurs les plus récentes correspondent à certaines conditions), vous pouvez utiliser `FINAL` le modificateur du `FROM` clause. Cette approche est inefficace et ne devrait pas être utilisée avec de grandes tables. + +## Exemple D'utilisation {#example-of-use} + +Les données de l'exemple: + +``` text +┌──────────────UserID─┬─PageViews─┬─Duration─┬─Sign─┬─Version─┐ +│ 4324182021466249494 │ 5 │ 146 │ 1 │ 1 | +│ 4324182021466249494 │ 5 │ 146 │ -1 │ 1 | +│ 4324182021466249494 │ 6 │ 185 │ 1 │ 2 | +└─────────────────────┴───────────┴──────────┴──────┴─────────┘ +``` + +Création de la table: + +``` sql +CREATE TABLE UAct +( + UserID UInt64, + PageViews UInt8, + Duration UInt8, + Sign Int8, + Version UInt8 +) +ENGINE = VersionedCollapsingMergeTree(Sign, Version) +ORDER BY UserID +``` + +Insérer les données: + +``` sql +INSERT INTO UAct VALUES (4324182021466249494, 5, 146, 1, 1) +``` + +``` sql +INSERT INTO UAct VALUES (4324182021466249494, 5, 146, -1, 1),(4324182021466249494, 6, 185, 1, 2) +``` + +Nous utilisons deux `INSERT` requêtes pour créer deux parties de données différentes. Si nous insérons les données avec une seule requête, ClickHouse crée une partie de données et n'effectuera jamais de fusion. + +L'obtention de données: + +``` sql +SELECT * FROM UAct +``` + +``` text +┌──────────────UserID─┬─PageViews─┬─Duration─┬─Sign─┬─Version─┐ +│ 4324182021466249494 │ 5 │ 146 │ 1 │ 1 │ +└─────────────────────┴───────────┴──────────┴──────┴─────────┘ +┌──────────────UserID─┬─PageViews─┬─Duration─┬─Sign─┬─Version─┐ +│ 4324182021466249494 │ 5 │ 146 │ -1 │ 1 │ +│ 4324182021466249494 │ 6 │ 185 │ 1 │ 2 │ +└─────────────────────┴───────────┴──────────┴──────┴─────────┘ +``` + +Que voyons-nous ici et où sont les parties effondrées? +Nous avons créé deux parties de données en utilisant deux `INSERT` requête. Le `SELECT` la requête a été effectuée dans deux threads, et le résultat est un ordre aléatoire de lignes. +L'effondrement n'a pas eu lieu car les parties de données n'ont pas encore été fusionnées. ClickHouse fusionne des parties de données à un moment inconnu que nous ne pouvons pas prédire. + +C'est pourquoi nous avons besoin de l'agrégation: + +``` sql +SELECT + UserID, + sum(PageViews * Sign) AS PageViews, + sum(Duration * Sign) AS Duration, + Version +FROM UAct +GROUP BY UserID, Version +HAVING sum(Sign) > 0 +``` + +``` text +┌──────────────UserID─┬─PageViews─┬─Duration─┬─Version─┐ +│ 4324182021466249494 │ 6 │ 185 │ 2 │ +└─────────────────────┴───────────┴──────────┴─────────┘ +``` + +Si nous n'avons pas besoin d'agrégation et que nous voulons forcer l'effondrement, nous pouvons utiliser le `FINAL` le modificateur du `FROM` clause. + +``` sql +SELECT * FROM UAct FINAL +``` + +``` text +┌──────────────UserID─┬─PageViews─┬─Duration─┬─Sign─┬─Version─┐ +│ 4324182021466249494 │ 6 │ 185 │ 1 │ 2 │ +└─────────────────────┴───────────┴──────────┴──────┴─────────┘ +``` + +C'est un moyen très inefficace de sélectionner des données. Ne l'utilisez pas pour les grandes tables. + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/versionedcollapsingmergetree/) diff --git a/docs/fr/operations/table_engines/view.md b/docs/fr/operations/table_engines/view.md new file mode 100644 index 00000000000..e6650a20399 --- /dev/null +++ b/docs/fr/operations/table_engines/view.md @@ -0,0 +1,9 @@ +--- +machine_translated: true +--- + +# Vue {#table_engines-view} + +Utilisé pour implémenter des vues (pour plus d'informations, voir `CREATE VIEW query`). Il ne stocke pas de données, mais stocke uniquement les `SELECT` requête. Lors de la lecture d'une table, il exécute cette requête (et supprime toutes les colonnes inutiles de la requête). + +[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/view/) diff --git a/docs/fr/operations/tips.md b/docs/fr/operations/tips.md new file mode 100644 index 00000000000..55dbf8a065b --- /dev/null +++ b/docs/fr/operations/tips.md @@ -0,0 +1,248 @@ +--- +machine_translated: true +--- + +# Recommandations D'Utilisation {#usage-recommendations} + +## Gouverneur de mise à L'échelle du processeur {#cpu-scaling-governor} + +Utilisez toujours la `performance` mise à l'échelle gouverneur. Le `on-demand` gouverneur de mise à l'échelle fonctionne bien pire avec une demande constamment élevée. + +``` bash +$ echo 'performance' | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor +``` + +## CPU Limitations {#cpu-limitations} + +Les processeurs peuvent surchauffer. Utiliser `dmesg` pour voir si la fréquence D'horloge du processeur était limitée en raison de la surchauffe. +La restriction peut également être définie en externe au niveau du centre de données. Vous pouvez utiliser `turbostat` à surveiller sous une charge. + +## RAM {#ram} + +Pour de petites quantités de données (jusqu'à ~200 GO en mode compressé), il est préférable d'utiliser autant de mémoire que le volume de données. +Pour de grandes quantités de données et lors du traitement de requêtes interactives (en ligne), vous devez utiliser une quantité raisonnable de RAM (128 Go ou plus) afin que le sous-ensemble de données chaudes s'intègre dans le cache des pages. +Même pour des volumes de données d'environ 50 To par serveur, l'utilisation de 128 Go de RAM améliore considérablement les performances des requêtes par rapport à 64 Go. + +Ne désactivez pas de surcharge. Valeur `cat /proc/sys/vm/overcommit_memory` devrait être 0 ou 1. Exécuter + +``` bash +$ echo 0 | sudo tee /proc/sys/vm/overcommit_memory +``` + +## Huge Pages {#huge-pages} + +Toujours désactiver les pages énormes transparentes. Il interfère avec les allocateurs de mémoire, ce qui entraîne une dégradation significative des performances. + +``` bash +$ echo 'never' | sudo tee /sys/kernel/mm/transparent_hugepage/enabled +``` + +Utiliser `perf top` pour regarder le temps passé dans le noyau pour la gestion de la mémoire. +Les pages énormes permanentes n'ont pas non plus besoin d'être allouées. + +## Sous-Système De Stockage {#storage-subsystem} + +Si votre budget vous permet D'utiliser SSD, utilisez SSD. +Sinon, utilisez un disque dur. Disques durs SATA 7200 RPM fera l'affaire. + +Donner la préférence à un grand nombre de serveurs avec des disques durs locaux sur un plus petit nombre de serveurs avec un disque attaché étagères. +Mais pour stocker des archives avec des requêtes rares, les étagères fonctionneront. + +## RAID {#raid} + +Lorsque vous utilisez le disque dur, vous pouvez combiner leur RAID-10, RAID-5, RAID-6 ou RAID-50. +Pour Linux, le RAID logiciel est meilleur (avec `mdadm`). Nous ne recommandons pas d'utiliser LVM. +Lors de la création de RAID-10, sélectionnez `far` disposition. +Si votre budget le permet, choisissez RAID-10. + +Si vous avez plus de 4 disques, Utilisez RAID-6 (préféré) ou RAID-50, au lieu de RAID-5. +Lorsque vous utilisez RAID-5, RAID-6 ou RAID-50, augmentez toujours stripe\_cache\_size, car la valeur par défaut n'est généralement pas le meilleur choix. + +``` bash +$ echo 4096 | sudo tee /sys/block/md2/md/stripe_cache_size +``` + +Calculez le nombre exact à partir du nombre de périphériques et de la taille du bloc, en utilisant la formule: `2 * num_devices * chunk_size_in_bytes / 4096`. + +Une taille de bloc de 1024 KO est suffisante pour toutes les configurations RAID. +Ne définissez jamais la taille du bloc trop petite ou trop grande. + +Vous pouvez utiliser RAID-0 sur SSD. +Quelle que soit L'utilisation du RAID, utilisez toujours la réplication pour la sécurité des données. + +Activer NCQ avec une longue file d'attente. Pour HDD, choisissez le planificateur CFQ, et pour SSD, choisissez noop. Ne pas réduire le ‘readahead’ paramètre. +Pour le disque dur, activez le cache d'écriture. + +## Système De Fichiers {#file-system} + +Ext4 est l'option la plus fiable. Définir les options de montage `noatime, nobarrier`. +XFS est également adapté, mais il n'a pas été aussi soigneusement testé avec ClickHouse. +La plupart des autres systèmes de fichiers devraient également fonctionner correctement. Les systèmes de fichiers avec allocation retardée fonctionnent mieux. + +## Le Noyau Linux {#linux-kernel} + +N'utilisez pas un noyau Linux obsolète. + +## Réseau {#network} + +Si vous utilisez IPv6, augmenter la taille du cache. +Le noyau Linux avant 3.2 avait une multitude de problèmes avec l'implémentation D'IPv6. + +Utilisez au moins un réseau de 10 Go, si possible. 1 Go fonctionnera également, mais ce sera bien pire pour patcher des répliques avec des dizaines de téraoctets de données, ou pour traiter des requêtes distribuées avec une grande quantité de données intermédiaires. + +## ZooKeeper {#zookeeper} + +Vous utilisez probablement déjà ZooKeeper à d'autres fins. Vous pouvez utiliser la même installation de ZooKeeper, si elle n'est pas déjà surchargée. + +It's best to use a fresh version of ZooKeeper – 3.4.9 or later. The version in stable Linux distributions may be outdated. + +Vous ne devez jamais utiliser de scripts écrits manuellement pour transférer des données entre différents clusters ZooKeeper, car le résultat sera incorrect pour les nœuds séquentiels. Ne jamais utiliser de l' “zkcopy” utilitaire pour la même raison: https://github.com/ksprojects/zkcopy/issues/15 + +Si vous souhaitez diviser un cluster Zookeeper existant en deux, le bon moyen est d'augmenter le nombre de ses répliques, puis de le reconfigurer en deux clusters indépendants. + +N'exécutez pas ZooKeeper sur les mêmes serveurs que ClickHouse. Parce que ZooKeeper est très sensible à la latence et ClickHouse peut utiliser toutes les ressources système disponibles. + +Avec les paramètres par défaut, ZooKeeper est une bombe à retardement: + +> Le serveur ZooKeeper ne supprime pas les fichiers des anciens snapshots et journaux lors de l'utilisation de la configuration par défaut (voir autopurge), et c'est la responsabilité de l'opérateur. + +Cette bombe doit être désamorcée. + +La configuration ZooKeeper (3.5.1) ci-dessous est utilisée dans le Yandex.Environnement de production Metrica au 20 mai 2017: + +zoo.cfg: + +``` bash +# http://hadoop.apache.org/zookeeper/docs/current/zookeeperAdmin.html + +# The number of milliseconds of each tick +tickTime=2000 +# The number of ticks that the initial +# synchronization phase can take +initLimit=30000 +# The number of ticks that can pass between +# sending a request and getting an acknowledgement +syncLimit=10 + +maxClientCnxns=2000 + +maxSessionTimeout=60000000 +# the directory where the snapshot is stored. +dataDir=/opt/zookeeper/{{ '{{' }} cluster['name'] {{ '}}' }}/data +# Place the dataLogDir to a separate physical disc for better performance +dataLogDir=/opt/zookeeper/{{ '{{' }} cluster['name'] {{ '}}' }}/logs + +autopurge.snapRetainCount=10 +autopurge.purgeInterval=1 + + +# To avoid seeks ZooKeeper allocates space in the transaction log file in +# blocks of preAllocSize kilobytes. The default block size is 64M. One reason +# for changing the size of the blocks is to reduce the block size if snapshots +# are taken more often. (Also, see snapCount). +preAllocSize=131072 + +# Clients can submit requests faster than ZooKeeper can process them, +# especially if there are a lot of clients. To prevent ZooKeeper from running +# out of memory due to queued requests, ZooKeeper will throttle clients so that +# there is no more than globalOutstandingLimit outstanding requests in the +# system. The default limit is 1,000.ZooKeeper logs transactions to a +# transaction log. After snapCount transactions are written to a log file a +# snapshot is started and a new transaction log file is started. The default +# snapCount is 10,000. +snapCount=3000000 + +# If this option is defined, requests will be will logged to a trace file named +# traceFile.year.month.day. +#traceFile= + +# Leader accepts client connections. Default value is "yes". The leader machine +# coordinates updates. For higher update throughput at thes slight expense of +# read throughput the leader can be configured to not accept clients and focus +# on coordination. +leaderServes=yes + +standaloneEnabled=false +dynamicConfigFile=/etc/zookeeper-{{ '{{' }} cluster['name'] {{ '}}' }}/conf/zoo.cfg.dynamic +``` + +Version de Java: + +``` text +Java(TM) SE Runtime Environment (build 1.8.0_25-b17) +Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode) +``` + +Les paramètres de la JVM: + +``` bash +NAME=zookeeper-{{ '{{' }} cluster['name'] {{ '}}' }} +ZOOCFGDIR=/etc/$NAME/conf + +# TODO this is really ugly +# How to find out, which jars are needed? +# seems, that log4j requires the log4j.properties file to be in the classpath +CLASSPATH="$ZOOCFGDIR:/usr/build/classes:/usr/build/lib/*.jar:/usr/share/zookeeper/zookeeper-3.5.1-metrika.jar:/usr/share/zookeeper/slf4j-log4j12-1.7.5.jar:/usr/share/zookeeper/slf4j-api-1.7.5.jar:/usr/share/zookeeper/servlet-api-2.5-20081211.jar:/usr/share/zookeeper/netty-3.7.0.Final.jar:/usr/share/zookeeper/log4j-1.2.16.jar:/usr/share/zookeeper/jline-2.11.jar:/usr/share/zookeeper/jetty-util-6.1.26.jar:/usr/share/zookeeper/jetty-6.1.26.jar:/usr/share/zookeeper/javacc.jar:/usr/share/zookeeper/jackson-mapper-asl-1.9.11.jar:/usr/share/zookeeper/jackson-core-asl-1.9.11.jar:/usr/share/zookeeper/commons-cli-1.2.jar:/usr/src/java/lib/*.jar:/usr/etc/zookeeper" + +ZOOCFG="$ZOOCFGDIR/zoo.cfg" +ZOO_LOG_DIR=/var/log/$NAME +USER=zookeeper +GROUP=zookeeper +PIDDIR=/var/run/$NAME +PIDFILE=$PIDDIR/$NAME.pid +SCRIPTNAME=/etc/init.d/$NAME +JAVA=/usr/bin/java +ZOOMAIN="org.apache.zookeeper.server.quorum.QuorumPeerMain" +ZOO_LOG4J_PROP="INFO,ROLLINGFILE" +JMXLOCALONLY=false +JAVA_OPTS="-Xms{{ '{{' }} cluster.get('xms','128M') {{ '}}' }} \ + -Xmx{{ '{{' }} cluster.get('xmx','1G') {{ '}}' }} \ + -Xloggc:/var/log/$NAME/zookeeper-gc.log \ + -XX:+UseGCLogFileRotation \ + -XX:NumberOfGCLogFiles=16 \ + -XX:GCLogFileSize=16M \ + -verbose:gc \ + -XX:+PrintGCTimeStamps \ + -XX:+PrintGCDateStamps \ + -XX:+PrintGCDetails + -XX:+PrintTenuringDistribution \ + -XX:+PrintGCApplicationStoppedTime \ + -XX:+PrintGCApplicationConcurrentTime \ + -XX:+PrintSafepointStatistics \ + -XX:+UseParNewGC \ + -XX:+UseConcMarkSweepGC \ +-XX:+CMSParallelRemarkEnabled" +``` + +Sel init: + +``` text +description "zookeeper-{{ '{{' }} cluster['name'] {{ '}}' }} centralized coordination service" + +start on runlevel [2345] +stop on runlevel [!2345] + +respawn + +limit nofile 8192 8192 + +pre-start script + [ -r "/etc/zookeeper-{{ '{{' }} cluster['name'] {{ '}}' }}/conf/environment" ] || exit 0 + . /etc/zookeeper-{{ '{{' }} cluster['name'] {{ '}}' }}/conf/environment + [ -d $ZOO_LOG_DIR ] || mkdir -p $ZOO_LOG_DIR + chown $USER:$GROUP $ZOO_LOG_DIR +end script + +script + . /etc/zookeeper-{{ '{{' }} cluster['name'] {{ '}}' }}/conf/environment + [ -r /etc/default/zookeeper ] && . /etc/default/zookeeper + if [ -z "$JMXDISABLE" ]; then + JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=$JMXLOCALONLY" + fi + exec start-stop-daemon --start -c $USER --exec $JAVA --name zookeeper-{{ '{{' }} cluster['name'] {{ '}}' }} \ + -- -cp $CLASSPATH $JAVA_OPTS -Dzookeeper.log.dir=${ZOO_LOG_DIR} \ + -Dzookeeper.root.logger=${ZOO_LOG4J_PROP} $ZOOMAIN $ZOOCFG +end script +``` + +[Article Original](https://clickhouse.tech/docs/en/operations/tips/) diff --git a/docs/fr/operations/troubleshooting.md b/docs/fr/operations/troubleshooting.md new file mode 100644 index 00000000000..d8214cdcddc --- /dev/null +++ b/docs/fr/operations/troubleshooting.md @@ -0,0 +1,143 @@ +--- +machine_translated: true +--- + +# Dépannage {#troubleshooting} + +- [Installation](#troubleshooting-installation-errors) +- [Connexion au serveur](#troubleshooting-accepts-no-connections) +- [Traitement des requêtes](#troubleshooting-does-not-process-queries) +- [Efficacité du traitement des requêtes](#troubleshooting-too-slow) + +## Installation {#troubleshooting-installation-errors} + +### Vous ne pouvez pas obtenir de paquets deb à partir du référentiel ClickHouse avec apt-get {#you-cannot-get-deb-packages-from-clickhouse-repository-with-apt-get} + +- Vérifiez les paramètres du pare-feu. +- Si vous ne pouvez pas accéder au référentiel pour quelque raison que ce soit, téléchargez les packages comme décrit dans [Prise en main](../getting_started/index.md) article et les installer manuellement en utilisant le `sudo dpkg -i ` commande. Vous aurez aussi besoin d' `tzdata` paquet. + +## Connexion au Serveur {#troubleshooting-accepts-no-connections} + +Problèmes possibles: + +- Le serveur n'est pas en cours d'exécution. +- Paramètres de configuration inattendus ou incorrects. + +### Le Serveur N'Est Pas En Cours D'Exécution {#server-is-not-running} + +**Vérifiez si le serveur est runnnig** + +Commande: + +``` bash +$ sudo service clickhouse-server status +``` + +Si le serveur n'est pas en cours d'exécution, démarrez-le avec la commande: + +``` bash +$ sudo service clickhouse-server start +``` + +**Vérifier les journaux** + +Le journal principal de `clickhouse-server` est dans `/var/log/clickhouse-server/clickhouse-server.log` par défaut. + +Si le serveur a démarré avec succès, vous devriez voir les chaînes: + +- ` Application: starting up.` — Server started. +- ` Application: Ready for connections.` — Server is running and ready for connections. + +Si `clickhouse-server` démarrage a échoué avec une erreur de configuration, vous devriez voir la `` chaîne avec une description de l'erreur. Exemple: + +``` text +2019.01.11 15:23:25.549505 [ 45 ] {} ExternalDictionaries: Failed reloading 'event2id' external dictionary: Poco::Exception. Code: 1000, e.code() = 111, e.displayText() = Connection refused, e.what() = Connection refused +``` + +Si vous ne voyez pas d'erreur à la fin du fichier, parcourez le fichier entier à partir de la chaîne: + +``` text + Application: starting up. +``` + +Si vous essayez de démarrer une deuxième instance de `clickhouse-server` sur le serveur, vous voyez le journal suivant: + +``` text +2019.01.11 15:25:11.151730 [ 1 ] {} : Starting ClickHouse 19.1.0 with revision 54413 +2019.01.11 15:25:11.154578 [ 1 ] {} Application: starting up +2019.01.11 15:25:11.156361 [ 1 ] {} StatusFile: Status file ./status already exists - unclean restart. Contents: +PID: 8510 +Started at: 2019-01-11 15:24:23 +Revision: 54413 + +2019.01.11 15:25:11.156673 [ 1 ] {} Application: DB::Exception: Cannot lock file ./status. Another server instance in same directory is already running. +2019.01.11 15:25:11.156682 [ 1 ] {} Application: shutting down +2019.01.11 15:25:11.156686 [ 1 ] {} Application: Uninitializing subsystem: Logging Subsystem +2019.01.11 15:25:11.156716 [ 2 ] {} BaseDaemon: Stop SignalListener thread +``` + +**Voir système.d les journaux** + +Si vous ne trouvez aucune information utile dans `clickhouse-server` journaux ou il n'y a pas de journaux, vous pouvez afficher `system.d` journaux à l'aide de la commande: + +``` bash +$ sudo journalctl -u clickhouse-server +``` + +**Démarrer clickhouse-server en mode interactif** + +``` bash +$ sudo -u clickhouse /usr/bin/clickhouse-server --config-file /etc/clickhouse-server/config.xml +``` + +Cette commande démarre le serveur en tant qu'application interactive avec les paramètres standard du script de démarrage automatique. Dans ce mode `clickhouse-server` imprime tous les messages d'événement dans la console. + +### Paramètres De Configuration {#configuration-parameters} + +Vérifier: + +- Le panneau paramètres. + + Si vous exécutez ClickHouse dans Docker dans un réseau IPv6, assurez-vous que `network=host` est définie. + +- Paramètres du point de terminaison. + + Vérifier [listen\_host](server_settings/settings.md#server_settings-listen_host) et [tcp\_port](server_settings/settings.md#server_settings-tcp_port) paramètre. + + Clickhouse server accepte les connexions localhost uniquement par défaut. + +- Paramètres du protocole HTTP. + + Vérifiez les paramètres de protocole pour L'API HTTP. + +- Paramètres de connexion sécurisés. + + Vérifier: + + - Le [tcp\_port\_secure](server_settings/settings.md#server_settings-tcp_port_secure) paramètre. + - Paramètres pour [SSL sertificates](server_settings/settings.md#server_settings-openssl). + + Utilisez les paramètres appropriés lors de la connexion. Par exemple, l'utilisation de la `port_secure` paramètre avec `clickhouse_client`. + +- Les paramètres de l'utilisateur. + + Vous utilisez peut-être un mauvais nom d'utilisateur ou mot de passe. + +## Traitement Des Requêtes {#troubleshooting-does-not-process-queries} + +Si ClickHouse ne peut pas traiter la requête, il envoie une description d'erreur au client. Dans le `clickhouse-client` vous obtenez une description de l'erreur dans la console. Si vous utilisez L'interface HTTP, ClickHouse envoie la description de l'erreur dans le corps de la réponse. Exemple: + +``` bash +$ curl 'http://localhost:8123/' --data-binary "SELECT a" +Code: 47, e.displayText() = DB::Exception: Unknown identifier: a. Note that there are no tables (FROM clause) in your query, context: required_names: 'a' source_tables: table_aliases: private_aliases: column_aliases: public_columns: 'a' masked_columns: array_join_columns: source_columns: , e.what() = DB::Exception +``` + +Si vous commencez à `clickhouse-client` avec l' `stack-trace` paramètre, ClickHouse renvoie la trace de la pile du serveur avec la description d'une erreur. + +Vous pouvez voir un message sur une connexion rompue. Dans ce cas, vous pouvez répéter la requête. Si la connexion se rompt chaque fois que vous effectuez la requête, vérifiez les journaux du serveur pour détecter les erreurs. + +## Efficacité du traitement des requêtes {#troubleshooting-too-slow} + +Si vous voyez que ClickHouse fonctionne trop lentement, vous devez profiler la charge sur les ressources du serveur et le réseau pour vos requêtes. + +Vous pouvez utiliser l'utilitaire clickhouse-benchmark pour profiler les requêtes. Il indique le nombre de requêtes traitées par seconde, le nombre de lignes traitées par seconde, et les percentiles de temps de traitement des requêtes. diff --git a/docs/fr/operations/update.md b/docs/fr/operations/update.md new file mode 100644 index 00000000000..e92147e2d65 --- /dev/null +++ b/docs/fr/operations/update.md @@ -0,0 +1,17 @@ +--- +machine_translated: true +--- + +# Mise À Jour De ClickHouse {#clickhouse-update} + +Si ClickHouse a été installé à partir de paquets deb, exécutez les commandes suivantes sur le serveur: + +``` bash +$ sudo apt-get update +$ sudo apt-get install clickhouse-client clickhouse-server +$ sudo service clickhouse-server restart +``` + +Si vous avez installé ClickHouse en utilisant autre chose que les paquets deb recommandés, utilisez la méthode de mise à jour appropriée. + +ClickHouse ne prend pas en charge une mise à jour distribuée. L'opération doit être effectuée consécutivement sur chaque serveur séparé. Ne pas mettre à jour tous les serveurs d'un cluster simultanément, ou le cluster sera indisponible pendant un certain temps. diff --git a/docs/fr/operations/utils/clickhouse-benchmark.md b/docs/fr/operations/utils/clickhouse-benchmark.md new file mode 100644 index 00000000000..00c3f588039 --- /dev/null +++ b/docs/fr/operations/utils/clickhouse-benchmark.md @@ -0,0 +1,153 @@ +--- +machine_translated: true +--- + +# clickhouse-benchmark {#clickhouse-benchmark} + +Se connecte à un serveur ClickHouse et envoie à plusieurs reprises des requêtes spécifiées. + +Syntaxe: + +``` bash +$ echo "single query" | clickhouse-benchmark [keys] +``` + +ou + +``` bash +$ clickhouse-benchmark [keys] <<< "single query" +``` + +Si vous souhaitez envoyer un ensemble de requêtes, créez un fichier texte et placez chaque requête sur la chaîne individuelle de ce fichier. Exemple: + +``` sql +SELECT * FROM system.numbers LIMIT 10000000 +SELECT 1 +``` + +Ensuite, passez ce fichier à une entrée standard de `clickhouse-benchmark`. + +``` bash +clickhouse-benchmark [keys] < queries_file +``` + +## Touches {#clickhouse-benchmark-keys} + +- `-c N`, `--concurrency=N` — Number of queries that `clickhouse-benchmark` envoie simultanément. Valeur par défaut: 1. +- `-d N`, `--delay=N` — Interval in seconds between intermediate reports (set 0 to disable reports). Default value: 1. +- `-h WORD`, `--host=WORD` — Server host. Default value: `localhost`. Pour l' [mode de comparaison](#clickhouse-benchmark-comparison-mode) vous pouvez utiliser plusieurs `-h` touches. +- `-p N`, `--port=N` — Server port. Default value: 9000. For the [mode de comparaison](#clickhouse-benchmark-comparison-mode) vous pouvez utiliser plusieurs `-p` touches. +- `-i N`, `--iterations=N` — Total number of queries. Default value: 0. +- `-r`, `--randomize` — Random order of queries execution if there is more then one input query. +- `-s`, `--secure` — Using TLS connection. +- `-t N`, `--timelimit=N` — Time limit in seconds. `clickhouse-benchmark` arrête d'envoyer des requêtes lorsque le délai spécifié est atteint. Valeur par défaut: 0 (limite de temps désactivée). +- `--confidence=N` — Level of confidence for T-test. Possible values: 0 (80%), 1 (90%), 2 (95%), 3 (98%), 4 (99%), 5 (99.5%). Default value: 5. In the [mode de comparaison](#clickhouse-benchmark-comparison-mode) `clickhouse-benchmark` effectue les [Test T de L'étudiant indépendant à deux échantillons](https://en.wikipedia.org/wiki/Student%27s_t-test#Independent_two-sample_t-test) tester pour déterminer si les deux distributions ne sont pas différentes avec le niveau de confiance sélectionné. +- `--cumulative` — Printing cumulative data instead of data per interval. +- `--database=DATABASE_NAME` — ClickHouse database name. Default value: `default`. +- `--json=FILEPATH` — JSON output. When the key is set, `clickhouse-benchmark` génère un rapport dans le fichier JSON spécifié. +- `--user=USERNAME` — ClickHouse user name. Default value: `default`. +- `--password=PSWD` — ClickHouse user password. Default value: empty string. +- `--stacktrace` — Stack traces output. When the key is set, `clickhouse-bencmark` affiche les traces d'exceptions de la pile. +- `--stage=WORD` — Query processing stage at server. ClickHouse stops query processing and returns answer to `clickhouse-benchmark` à l'étape spécifiée. Valeurs possibles: `complete`, `fetch_columns`, `with_mergeable_state`. Valeur par défaut: `complete`. +- `--help` — Shows the help message. + +Si vous voulez appliquer des [paramètre](../../operations/settings/index.md) pour les requêtes, les passer comme une clé `--= SETTING_VALUE`. Exemple, `--max_memory_usage=1048576`. + +## Sortie {#clickhouse-benchmark-output} + +Par défaut, `clickhouse-benchmark` les rapports de chaque `--delay` intervalle. + +Exemple de rapport: + +``` text +Queries executed: 10. + +localhost:9000, queries 10, QPS: 6.772, RPS: 67904487.440, MiB/s: 518.070, result RPS: 67721584.984, result MiB/s: 516.675. + +0.000% 0.145 sec. +10.000% 0.146 sec. +20.000% 0.146 sec. +30.000% 0.146 sec. +40.000% 0.147 sec. +50.000% 0.148 sec. +60.000% 0.148 sec. +70.000% 0.148 sec. +80.000% 0.149 sec. +90.000% 0.150 sec. +95.000% 0.150 sec. +99.000% 0.150 sec. +99.900% 0.150 sec. +99.990% 0.150 sec. +``` + +Dans le rapport, vous pouvez trouver: + +- Nombre de requêtes dans le `Queries executed:` champ. + +- Le statut de chaîne de caractères contenant (dans l'ordre): + + - Point de terminaison du serveur ClickHouse. + - Nombre de requêtes traitées. + - QPS: QPS: combien de requêtes serveur effectuées par seconde pendant une période spécifiée dans le `--delay` argument. + - RPS: combien de lignes le serveur a lues par seconde pendant une période spécifiée dans `--delay` argument. + - MiB/ s: combien de mebibytes serveur lus par seconde pendant une période spécifiée dans le `--delay` argument. + - résultat RPS: combien de lignes placées par le serveur au résultat d'une requête par seconde pendant une période spécifiée dans le `--delay` argument. + - MiB / s de résultat. combien de mibibytes placés par le serveur au résultat d'une requête par seconde pendant une période spécifiée dans `--delay` argument. + +- Percentiles du temps d'exécution des requêtes. + +## Mode de comparaison {#clickhouse-benchmark-comparison-mode} + +`clickhouse-benchmark` peut comparer les performances pour deux serveurs clickhouse en cours d'exécution. + +Pour utiliser le mode de comparaison, spécifiez les points de terminaison des deux serveurs par deux paires de `--host`, `--port` touches. Clés appariées ensemble par position dans la liste des arguments, la première `--host` est assorti avec le premier `--port` et ainsi de suite. `clickhouse-benchmark` établit les connexions aux serveurs, puis envoie des requêtes. Chaque requête adressée à un serveur sélectionné au hasard. Les résultats sont présentés pour chaque serveur séparément. + +## Exemple {#clickhouse-benchmark-example} + +``` bash +$ echo "SELECT * FROM system.numbers LIMIT 10000000 OFFSET 10000000" | clickhouse-benchmark -i 10 +``` + +``` text +Loaded 1 queries. + +Queries executed: 6. + +localhost:9000, queries 6, QPS: 6.153, RPS: 123398340.957, MiB/s: 941.455, result RPS: 61532982.200, result MiB/s: 469.459. + +0.000% 0.159 sec. +10.000% 0.159 sec. +20.000% 0.159 sec. +30.000% 0.160 sec. +40.000% 0.160 sec. +50.000% 0.162 sec. +60.000% 0.164 sec. +70.000% 0.165 sec. +80.000% 0.166 sec. +90.000% 0.166 sec. +95.000% 0.167 sec. +99.000% 0.167 sec. +99.900% 0.167 sec. +99.990% 0.167 sec. + + + +Queries executed: 10. + +localhost:9000, queries 10, QPS: 6.082, RPS: 121959604.568, MiB/s: 930.478, result RPS: 60815551.642, result MiB/s: 463.986. + +0.000% 0.159 sec. +10.000% 0.159 sec. +20.000% 0.160 sec. +30.000% 0.163 sec. +40.000% 0.164 sec. +50.000% 0.165 sec. +60.000% 0.166 sec. +70.000% 0.166 sec. +80.000% 0.167 sec. +90.000% 0.167 sec. +95.000% 0.170 sec. +99.000% 0.172 sec. +99.900% 0.172 sec. +99.990% 0.172 sec. +``` diff --git a/docs/fr/operations/utils/clickhouse-copier.md b/docs/fr/operations/utils/clickhouse-copier.md new file mode 100644 index 00000000000..de7bb56f32b --- /dev/null +++ b/docs/fr/operations/utils/clickhouse-copier.md @@ -0,0 +1,173 @@ +--- +machine_translated: true +--- + +# clickhouse-copieur {#clickhouse-copier} + +Copie les données des tables d'un cluster vers des tables d'un autre cluster (ou du même cluster). + +Vous pouvez exécuter plusieurs `clickhouse-copier` instances sur différents serveurs pour effectuer le même travail. ZooKeeper est utilisé pour synchroniser les processus. + +Après le démarrage de, `clickhouse-copier`: + +- Se connecte à ZooKeeper et reçoit: + + - La copie de tâches. + - L'état de la copie d'emplois. + +- Il effectue les travaux. + + Chaque processus en cours choisit le “closest” eclat du cluster source et copie les données dans le cluster de destination, la refragmentation les données si nécessaire. + +`clickhouse-copier` suit les changements dans ZooKeeper et les applique à la volée. + +Pour réduire le trafic réseau, nous vous recommandons de `clickhouse-copier` sur le même serveur où se trouvent les données source. + +## Course clickhouse-copieur {#running-clickhouse-copier} + +L'utilitaire doit être exécuté manuellement: + +``` bash +$ clickhouse-copier copier --daemon --config zookeeper.xml --task-path /task/path --base-dir /path/to/dir +``` + +Paramètre: + +- `daemon` — Starts `clickhouse-copier` en mode démon. +- `config` — The path to the `zookeeper.xml` fichier avec les paramètres pour la connexion à la Gardienne. +- `task-path` — The path to the ZooKeeper node. This node is used for syncing `clickhouse-copier` processus et stockage des tâches. Les tâches sont stockées dans `$task-path/description`. +- `task-file` — Optional path to file with task configuration for initial upload to ZooKeeper. +- `task-upload-force` — Force upload `task-file` même si le nœud existe déjà. +- `base-dir` — The path to logs and auxiliary files. When it starts, `clickhouse-copier` crée `clickhouse-copier_YYYYMMHHSS_` les sous-répertoires `$base-dir`. Si ce paramètre est omis, les répertoires sont créés dans le répertoire où `clickhouse-copier` a été lancé. + +## Format de zookeeper.XML {#format-of-zookeeper-xml} + +``` xml + + + trace + 100M + 3 + + + + + 127.0.0.1 + 2181 + + + +``` + +## Configuration des tâches de copie {#configuration-of-copying-tasks} + +``` xml + + + + + + false + + 127.0.0.1 + 9000 + + + ... + + + + ... + + + + + 2 + + + + 1 + + + + + 0 + + + + + 3 + + 1 + + + + + + + + source_cluster + test + hits + + + destination_cluster + test + hits2 + + + + ENGINE=ReplicatedMergeTree('/clickhouse/tables/{cluster}/{shard}/hits2', '{replica}') + PARTITION BY toMonday(date) + ORDER BY (CounterID, EventDate) + + + + jumpConsistentHash(intHash64(UserID), 2) + + + CounterID != 0 + + + + '2018-02-26' + '2018-03-05' + ... + + + + + + ... + + ... + + +``` + +`clickhouse-copier` suit les changements dans `/task/path/description` et les applique à la volée. Par exemple, si vous modifiez la valeur de `max_workers`, le nombre de processus exécutant des tâches changera également. + +[Article Original](https://clickhouse.tech/docs/en/operations/utils/clickhouse-copier/) diff --git a/docs/fr/operations/utils/clickhouse-local.md b/docs/fr/operations/utils/clickhouse-local.md new file mode 100644 index 00000000000..60e3c885d57 --- /dev/null +++ b/docs/fr/operations/utils/clickhouse-local.md @@ -0,0 +1,78 @@ +--- +machine_translated: true +--- + +# clickhouse-local {#clickhouse-local} + +Le `clickhouse-local` programme vous permet d'effectuer un traitement rapide sur les fichiers locaux, sans avoir à déployer et configurer le serveur ClickHouse. + +Accepte les données qui représentent des tables et les interroge en utilisant [Clickhouse dialecte SQL](../../query_language/index.md). + +`clickhouse-local` utilise le même noyau que clickhouse server, de sorte qu'il prend en charge la plupart des fonctionnalités et le même ensemble de formats et de moteurs de table. + +Par défaut `clickhouse-local` n'a pas accès aux données sur le même hôte, mais il prend en charge le chargement de la configuration du serveur à l'aide `--config-file` argument. + +!!! warning "Avertissement" + Il n'est pas recommandé de charger la configuration du serveur de production dans `clickhouse-local` parce que les données peuvent être endommagées en cas d'erreur humaine. + +## Utilisation {#usage} + +Utilisation de base: + +``` bash +$ clickhouse-local --structure "table_structure" --input-format "format_of_incoming_data" -q "query" +``` + +Argument: + +- `-S`, `--structure` — table structure for input data. +- `-if`, `--input-format` — input format, `TSV` par défaut. +- `-f`, `--file` — path to data, `stdin` par défaut. +- `-q` `--query` — queries to execute with `;` comme délimiteur. +- `-N`, `--table` — table name where to put output data, `table` par défaut. +- `-of`, `--format`, `--output-format` — output format, `TSV` par défaut. +- `--stacktrace` — whether to dump debug output in case of exception. +- `--verbose` — more details on query execution. +- `-s` — disables `stderr` journalisation. +- `--config-file` — path to configuration file in same format as for ClickHouse server, by default the configuration empty. +- `--help` — arguments references for `clickhouse-local`. + +Il existe également des arguments pour chaque variable de configuration de ClickHouse qui sont plus couramment utilisés à la place de `--config-file`. + +## Exemple {#examples} + +``` bash +$ echo -e "1,2\n3,4" | clickhouse-local -S "a Int64, b Int64" -if "CSV" -q "SELECT * FROM table" +Read 2 rows, 32.00 B in 0.000 sec., 5182 rows/sec., 80.97 KiB/sec. +1 2 +3 4 +``` + +Exemple précédent est le même que: + +``` bash +$ echo -e "1,2\n3,4" | clickhouse-local -q "CREATE TABLE table (a Int64, b Int64) ENGINE = File(CSV, stdin); SELECT a, b FROM table; DROP TABLE table" +Read 2 rows, 32.00 B in 0.000 sec., 4987 rows/sec., 77.93 KiB/sec. +1 2 +3 4 +``` + +Maintenant, nous allons sortie utilisateur de mémoire pour chaque utilisateur Unix: + +``` bash +$ ps aux | tail -n +2 | awk '{ printf("%s\t%s\n", $1, $4) }' | clickhouse-local -S "user String, mem Float64" -q "SELECT user, round(sum(mem), 2) as memTotal FROM table GROUP BY user ORDER BY memTotal DESC FORMAT Pretty" +``` + +``` text +Read 186 rows, 4.15 KiB in 0.035 sec., 5302 rows/sec., 118.34 KiB/sec. +┏━━━━━━━━━━┳━━━━━━━━━━┓ +┃ user ┃ memTotal ┃ +┡━━━━━━━━━━╇━━━━━━━━━━┩ +│ bayonet │ 113.5 │ +├──────────┼──────────┤ +│ root │ 8.8 │ +├──────────┼──────────┤ +... +``` + +[Article Original](https://clickhouse.tech/docs/en/operations/utils/clickhouse-local/) diff --git a/docs/fr/operations/utils/index.md b/docs/fr/operations/utils/index.md new file mode 100644 index 00000000000..29f9b647301 --- /dev/null +++ b/docs/fr/operations/utils/index.md @@ -0,0 +1,11 @@ +--- +machine_translated: true +--- + +# Clickhouse Utilitaire {#clickhouse-utility} + +- [clickhouse-local](clickhouse-local.md) — Allows running SQL queries on data without stopping the ClickHouse server, similar to how `awk` ne ce. +- [clickhouse-copieur](clickhouse-copier.md) — Copies (and reshards) data from one cluster to another cluster. +- [clickhouse-benchmark](clickhouse-benchmark.md) — Loads server with the custom queries and settings. + +[Article Original](https://clickhouse.tech/docs/en/operations/utils/) diff --git a/docs/fr/query_language/agg_functions/combinators.md b/docs/fr/query_language/agg_functions/combinators.md new file mode 100644 index 00000000000..bbf28b12c96 --- /dev/null +++ b/docs/fr/query_language/agg_functions/combinators.md @@ -0,0 +1,163 @@ +--- +machine_translated: true +--- + +# Combinateurs de fonction d'agrégat {#aggregate_functions_combinators} + +Le nom d'une fonction d'agrégat peut avoir un suffixe ajouté. Cela change la façon dont la fonction d'agrégation fonctionne. + +## -Si {#agg-functions-combinator-if} + +The suffix -If can be appended to the name of any aggregate function. In this case, the aggregate function accepts an extra argument – a condition (Uint8 type). The aggregate function processes only the rows that trigger the condition. If the condition was not triggered even once, it returns a default value (usually zeros or empty strings). + +Exemple: `sumIf(column, cond)`, `countIf(cond)`, `avgIf(x, cond)`, `quantilesTimingIf(level1, level2)(x, cond)`, `argMinIf(arg, val, cond)` et ainsi de suite. + +Avec les fonctions d'agrégat conditionnel, vous pouvez calculer des agrégats pour plusieurs conditions à la fois, sans utiliser de sous-requêtes et `JOIN`s. Par exemple, dans Yandex.Metrica, les fonctions d'agrégat conditionnel sont utilisées pour implémenter la fonctionnalité de comparaison de segment. + +## -Tableau {#agg-functions-combinator-array} + +Le Tableau suffixe peut être ajouté à toute fonction d'agrégation. Dans ce cas, la fonction d'agrégation des arguments de la ‘Array(T)’ type (tableaux) au lieu de ‘T’ tapez les arguments. Si la fonction aggregate accepte plusieurs arguments, il doit s'agir de tableaux de longueurs égales. Lors du traitement des tableaux, la fonction d'agrégation fonctionne comme la fonction d'agrégation d'origine sur tous les éléments du tableau. + +Exemple 1: `sumArray(arr)` - Totalise tous les éléments de tous ‘arr’ tableau. Dans cet exemple, il aurait pu être écrit plus simplement: `sum(arraySum(arr))`. + +Exemple 2: `uniqArray(arr)` – Counts the number of unique elements in all ‘arr’ tableau. Cela pourrait être fait d'une manière plus facile: `uniq(arrayJoin(arr))` mais ce n'est pas toujours possible d'ajouter des ‘arrayJoin’ pour une requête. + +\- Si et-tableau peut être combiné. Cependant, ‘Array’ doit venir en premier, puis ‘If’. Exemple: `uniqArrayIf(arr, cond)`, `quantilesTimingArrayIf(level1, level2)(arr, cond)`. En raison de cet ordre, le ‘cond’ argument ne sera pas un tableau. + +## -État {#agg-functions-combinator-state} + +Si vous appliquez ce combinateur, la fonction d'agrégation ne renvoie pas la valeur résultante (par exemple le nombre de valeurs uniques pour [uniq](reference.md#agg_function-uniq) la fonction), mais un état intermédiaire de l'agrégation (pour `uniq`, c'est la table de hachage pour calculer le nombre de valeurs uniques). C'est un `AggregateFunction(...)` qui peuvent être utilisés pour un traitement ultérieur ou stockés dans un tableau pour terminer l'agrégation plus tard. + +Pour travailler avec ces états, utilisez: + +- [AggregatingMergeTree](../../operations/table_engines/aggregatingmergetree.md) tableau moteur. +- [finalizeAggregation](../functions/other_functions.md#function-finalizeaggregation) fonction. +- [runningAccumulate](../functions/other_functions.md#function-runningaccumulate) fonction. +- [-Fusionner](#aggregate_functions_combinators_merge) combinator. +- [-MergeState](#aggregate_functions_combinators_mergestate) combinator. + +## -Fusionner {#aggregate_functions_combinators-merge} + +Si vous appliquez ce combinateur, la fonction d'agrégation prend l'état d'agrégation intermédiaire comme argument, combine les États pour terminer l'agrégation et renvoie la valeur résultante. + +## -MergeState {#aggregate_functions_combinators-mergestate} + +Fusionne les États d'agrégation intermédiaires de la même manière que le combinateur-Merge. Cependant, il ne renvoie pas la valeur résultante, mais un État d'agrégation intermédiaire, similaire au combinateur-State. + +## - ForEach {#agg-functions-combinator-foreach} + +Convertit une fonction d'agrégation pour les tables en une fonction d'agrégation pour les tableaux qui agrège les éléments de tableau correspondants et renvoie un tableau de résultats. Exemple, `sumForEach` pour les tableaux `[1, 2]`, `[3, 4, 5]`et`[6, 7]`renvoie le résultat `[10, 13, 5]` après avoir additionné les éléments de tableau correspondants. + +## - OrDefault {#agg-functions-combinator-ordefault} + +Remplit la valeur par défaut du type de retour de la fonction d'agrégation s'il n'y a rien à agréger. + +``` sql +SELECT avg(number), avgOrDefault(number) FROM numbers(0) +``` + +``` text +┌─avg(number)─┬─avgOrDefault(number)─┐ +│ nan │ 0 │ +└─────────────┴──────────────────────┘ +``` + +## - OrNull {#agg-functions-combinator-ornull} + +Remplir `null` si il n'y a rien à s'agréger. La colonne de retour sera nullable. + +``` sql +SELECT avg(number), avgOrNull(number) FROM numbers(0) +``` + +``` text +┌─avg(number)─┬─avgOrNull(number)─┐ +│ nan │ ᴺᵁᴸᴸ │ +└─────────────┴───────────────────┘ +``` + +\- OrDefault et-OrNull peuvent être combinés avec d'autres combinateurs. Il est utile lorsque la fonction d'agrégation n'accepte pas l'entrée vide. + +``` sql +SELECT avgOrNullIf(x, x > 10) +FROM +( + SELECT toDecimal32(1.23, 2) AS x +) +``` + +``` text +┌─avgOrNullIf(x, greater(x, 10))─┐ +│ ᴺᵁᴸᴸ │ +└────────────────────────────────┘ +``` + +## -Resample {#agg-functions-combinator-resample} + +Permet de diviser les données en groupes, puis séparément agrège les données de ces groupes. Les groupes sont créés en divisant les valeurs d'une colonne en intervalles. + +``` sql +Resample(start, end, step)(, resampling_key) +``` + +**Paramètre** + +- `start` — Starting value of the whole required interval for `resampling_key` valeur. +- `stop` — Ending value of the whole required interval for `resampling_key` valeur. L'ensemble de l'intervalle ne comprend pas les `stop` valeur `[start, stop)`. +- `step` — Step for separating the whole interval into subintervals. The `aggFunction` est exécuté sur chacun de ces sous-intervalles indépendamment. +- `resampling_key` — Column whose values are used for separating data into intervals. +- `aggFunction_params` — `aggFunction` paramètre. + +**Valeurs renvoyées** + +- Tableau de `aggFunction` les résultats pour chaque subinterval. + +**Exemple** + +Envisager l' `people` le tableau avec les données suivantes: + +``` text +┌─name───┬─age─┬─wage─┐ +│ John │ 16 │ 10 │ +│ Alice │ 30 │ 15 │ +│ Mary │ 35 │ 8 │ +│ Evelyn │ 48 │ 11.5 │ +│ David │ 62 │ 9.9 │ +│ Brian │ 60 │ 16 │ +└────────┴─────┴──────┘ +``` + +Obtenons les noms des personnes dont l'âge se trouve dans les intervalles de `[30,60)` et `[60,75)`. Puisque nous utilisons la représentation entière pour l'âge, nous obtenons des âges dans le `[30, 59]` et `[60,74]` intervalle. + +Pour agréger des noms dans un tableau, nous utilisons [grouperay](reference.md#agg_function-grouparray) fonction d'agrégation. Il faut un argument. Dans notre cas, c'est l' `name` colonne. Le `groupArrayResample` fonction devrait utiliser le `age` colonne pour agréger les noms par âge. Pour définir les intervalles requis, nous passons le `30, 75, 30` des arguments dans la `groupArrayResample` fonction. + +``` sql +SELECT groupArrayResample(30, 75, 30)(name, age) FROM people +``` + +``` text +┌─groupArrayResample(30, 75, 30)(name, age)─────┐ +│ [['Alice','Mary','Evelyn'],['David','Brian']] │ +└───────────────────────────────────────────────┘ +``` + +Considérez les résultats. + +`Jonh` est hors de l'échantillon parce qu'il est trop jeune. D'autres personnes sont distribués selon les intervalles d'âge. + +Maintenant, nous allons compter le nombre total de personnes et leur salaire moyen dans les intervalles d'âge. + +``` sql +SELECT + countResample(30, 75, 30)(name, age) AS amount, + avgResample(30, 75, 30)(wage, age) AS avg_wage +FROM people +``` + +``` text +┌─amount─┬─avg_wage──────────────────┐ +│ [3,2] │ [11.5,12.949999809265137] │ +└────────┴───────────────────────────┘ +``` + +[Article Original](https://clickhouse.tech/docs/en/query_language/agg_functions/combinators/) diff --git a/docs/fr/query_language/agg_functions/index.md b/docs/fr/query_language/agg_functions/index.md new file mode 100644 index 00000000000..c8d24c2c241 --- /dev/null +++ b/docs/fr/query_language/agg_functions/index.md @@ -0,0 +1,58 @@ +--- +machine_translated: true +--- + +# Les fonctions d'agrégation {#aggregate-functions} + +Les fonctions d'agrégation fonctionnent dans le [normal](http://www.sql-tutorial.com/sql-aggregate-functions-sql-tutorial) comme prévu par les experts de la base de données. + +Clickhouse prend également en charge: + +- [Fonctions d'agrégat paramétriques](parametric_functions.md#aggregate_functions_parametric) qui acceptent d'autres paramètres en plus des colonnes. +- [Combinators](combinators.md#aggregate_functions_combinators), qui modifient le comportement des fonctions d'agrégation. + +## Le traitement NULL {#null-processing} + +Au cours de l'agrégation, tous les `NULL`s sont ignorés. + +**Exemple:** + +Considérez ce tableau: + +``` text +┌─x─┬────y─┐ +│ 1 │ 2 │ +│ 2 │ ᴺᵁᴸᴸ │ +│ 3 │ 2 │ +│ 3 │ 3 │ +│ 3 │ ᴺᵁᴸᴸ │ +└───┴──────┘ +``` + +Disons que vous devez totaliser les valeurs dans le `y` colonne: + +``` sql +SELECT sum(y) FROM t_null_big +``` + + ┌─sum(y)─┐ + │ 7 │ + └────────┘ + +Le `sum` la fonction d'interprète `NULL` comme `0`. En particulier, cela signifie que si la fonction reçoit en entrée d'une sélection où toutes les valeurs sont `NULL`, alors le résultat sera `0`, pas `NULL`. + +Maintenant, vous pouvez utiliser le `groupArray` fonction pour créer un tableau à partir `y` colonne: + +``` sql +SELECT groupArray(y) FROM t_null_big +``` + +``` text +┌─groupArray(y)─┐ +│ [2,2,3] │ +└───────────────┘ +``` + +`groupArray` ne comprend pas `NULL` dans le tableau résultant. + +[Article Original](https://clickhouse.tech/docs/en/query_language/agg_functions/) diff --git a/docs/fr/query_language/agg_functions/parametric_functions.md b/docs/fr/query_language/agg_functions/parametric_functions.md new file mode 100644 index 00000000000..51a2c755cdc --- /dev/null +++ b/docs/fr/query_language/agg_functions/parametric_functions.md @@ -0,0 +1,496 @@ +--- +machine_translated: true +--- + +# Fonctions d'agrégat paramétriques {#aggregate_functions_parametric} + +Some aggregate functions can accept not only argument columns (used for compression), but a set of parameters – constants for initialization. The syntax is two pairs of brackets instead of one. The first is for parameters, and the second is for arguments. + +## histogramme {#histogram} + +Calcule un histogramme adaptatif. Cela ne garantit pas des résultats précis. + +``` sql +histogram(number_of_bins)(values) +``` + +Les fonctions utilise [Un Algorithme D'Arbre De Décision Parallèle En Continu](http://jmlr.org/papers/volume11/ben-haim10a/ben-haim10a.pdf). Les bordures des bacs d'histogramme sont ajustées au fur et à mesure que de nouvelles données entrent dans une fonction. Dans le cas courant, les largeurs des bacs ne sont pas égales. + +**Paramètre** + +`number_of_bins` — Upper limit for the number of bins in the histogram. The function automatically calculates the number of bins. It tries to reach the specified number of bins, but if it fails, it uses fewer bins. +`values` — [Expression](../syntax.md#syntax-expressions) résultant en valeurs d'entrée. + +**Valeurs renvoyées** + +- [Tableau](../../data_types/array.md) de [Tuple](../../data_types/tuple.md) de le format suivant: + + ``` + [(lower_1, upper_1, height_1), ... (lower_N, upper_N, height_N)] + ``` + + - `lower` — Lower bound of the bin. + - `upper` — Upper bound of the bin. + - `height` — Calculated height of the bin. + +**Exemple** + +``` sql +SELECT histogram(5)(number + 1) +FROM ( + SELECT * + FROM system.numbers + LIMIT 20 +) +``` + +``` text +┌─histogram(5)(plus(number, 1))───────────────────────────────────────────┐ +│ [(1,4.5,4),(4.5,8.5,4),(8.5,12.75,4.125),(12.75,17,4.625),(17,20,3.25)] │ +└─────────────────────────────────────────────────────────────────────────┘ +``` + +Vous pouvez visualiser un histogramme avec la [bar](../functions/other_functions.md#function-bar) fonction, par exemple: + +``` sql +WITH histogram(5)(rand() % 100) AS hist +SELECT + arrayJoin(hist).3 AS height, + bar(height, 0, 6, 5) AS bar +FROM +( + SELECT * + FROM system.numbers + LIMIT 20 +) +``` + +``` text +┌─height─┬─bar───┐ +│ 2.125 │ █▋ │ +│ 3.25 │ ██▌ │ +│ 5.625 │ ████▏ │ +│ 5.625 │ ████▏ │ +│ 3.375 │ ██▌ │ +└────────┴───────┘ +``` + +Dans ce cas, vous devez vous rappeler que vous ne connaissez pas les frontières de la corbeille d'histogramme. + +## sequenceMatch(pattern)(timestamp, cond1, cond2, …) {#function-sequencematch} + +Vérifie si la séquence contient une chaîne d'événements qui correspond au modèle. + +``` sql +sequenceMatch(pattern)(timestamp, cond1, cond2, ...) +``` + +!!! warning "Avertissement" + Les événements qui se produisent à la même seconde peuvent se situer dans la séquence dans un ordre indéfini affectant le résultat. + +**Paramètre** + +- `pattern` — Pattern string. See [Syntaxe du motif](#sequence-function-pattern-syntax). + +- `timestamp` — Column considered to contain time data. Typical data types are `Date` et `DateTime`. Vous pouvez également utiliser les prises en charge [UInt](../../data_types/int_uint.md) types de données. + +- `cond1`, `cond2` — Conditions that describe the chain of events. Data type: `UInt8`. Vous pouvez passer jusqu'à 32 arguments de condition. La fonction ne prend en compte que les événements décrits dans ces conditions. Si la séquence contient des données qui ne sont pas décrites dans une condition, la fonction les ignore. + +**Valeurs renvoyées** + +- 1, si le profil correspond. +- 0, si le motif ne correspond pas. + +Type: `UInt8`. + + +**Syntaxe du motif** + +- `(?N)` — Matches the condition argument at position `N`. Les Conditions sont numérotées dans le `[1, 32]` gamme. Exemple, `(?1)` correspond à l'argument passé au `cond1` paramètre. + +- `.*` — Matches any number of events. You don't need conditional arguments to match this element of the pattern. + +- `(?t operator value)` — Sets the time in seconds that should separate two events. For example, pattern `(?1)(?t>1800)(?2)` correspond à des événements qui se produisent plus de 1800 secondes les uns des autres. Un nombre arbitraire d'événements peut se trouver entre ces événements. Vous pouvez utiliser l' `>=`, `>`, `<`, `<=` opérateur. + +**Exemple** + +Considérer les données dans le `t` table: + +``` text +┌─time─┬─number─┐ +│ 1 │ 1 │ +│ 2 │ 3 │ +│ 3 │ 2 │ +└──────┴────────┘ +``` + +Effectuer la requête: + +``` sql +SELECT sequenceMatch('(?1)(?2)')(time, number = 1, number = 2) FROM t +``` + +``` text +┌─sequenceMatch('(?1)(?2)')(time, equals(number, 1), equals(number, 2))─┐ +│ 1 │ +└───────────────────────────────────────────────────────────────────────┘ +``` + +La fonction a trouvé la chaîne d'événements où le numéro 2 suit le numéro 1. Il a sauté le numéro 3 entre eux, car le nombre n'est pas décrit comme un événement. Si nous voulons prendre ce nombre en compte lors de la recherche de l'événement de la chaîne donnée dans l'exemple, nous devrions en faire une condition. + +``` sql +SELECT sequenceMatch('(?1)(?2)')(time, number = 1, number = 2, number = 3) FROM t +``` + +``` text +┌─sequenceMatch('(?1)(?2)')(time, equals(number, 1), equals(number, 2), equals(number, 3))─┐ +│ 0 │ +└──────────────────────────────────────────────────────────────────────────────────────────┘ +``` + +Dans ce cas, la fonction n'a pas pu trouver la chaîne d'événements correspondant au modèle, car l'événement pour le numéro 3 s'est produit entre 1 et 2. Si dans le même cas nous vérifions la condition pour le numéro 4, la séquence correspondrait au motif. + +``` sql +SELECT sequenceMatch('(?1)(?2)')(time, number = 1, number = 2, number = 4) FROM t +``` + +``` text +┌─sequenceMatch('(?1)(?2)')(time, equals(number, 1), equals(number, 2), equals(number, 4))─┐ +│ 1 │ +└──────────────────────────────────────────────────────────────────────────────────────────┘ +``` + +**Voir Aussi** + +- [sequenceCount](#function-sequencecount) + +## sequenceCount(pattern)(time, cond1, cond2, …) {#function-sequencecount} + +Compte le nombre de chaînes d'événements correspondant au motif. La fonction recherche les chaînes d'événements qui ne se chevauchent pas. Il commence à rechercher la chaîne suivante après que la chaîne actuelle est appariée. + +!!! warning "Avertissement" + Les événements qui se produisent à la même seconde peuvent se situer dans la séquence dans un ordre indéfini affectant le résultat. + +``` sql +sequenceCount(pattern)(timestamp, cond1, cond2, ...) +``` + +**Paramètre** + +- `pattern` — Pattern string. See [Syntaxe du motif](#sequence-function-pattern-syntax). + +- `timestamp` — Column considered to contain time data. Typical data types are `Date` et `DateTime`. Vous pouvez également utiliser les prises en charge [UInt](../../data_types/int_uint.md) types de données. + +- `cond1`, `cond2` — Conditions that describe the chain of events. Data type: `UInt8`. Vous pouvez passer jusqu'à 32 arguments de condition. La fonction ne prend en compte que les événements décrits dans ces conditions. Si la séquence contient des données qui ne sont pas décrites dans une condition, la fonction les ignore. + +**Valeurs renvoyées** + +- Nombre de chaînes d'événements qui ne se chevauchent pas et qui sont mises en correspondance. + +Type: `UInt64`. + +**Exemple** + +Considérer les données dans le `t` table: + +``` text +┌─time─┬─number─┐ +│ 1 │ 1 │ +│ 2 │ 3 │ +│ 3 │ 2 │ +│ 4 │ 1 │ +│ 5 │ 3 │ +│ 6 │ 2 │ +└──────┴────────┘ +``` + +Comptez combien de fois le nombre 2 se produit après le nombre 1 avec n'importe quelle quantité d'autres nombres entre eux: + +``` sql +SELECT sequenceCount('(?1).*(?2)')(time, number = 1, number = 2) FROM t +``` + +``` text +┌─sequenceCount('(?1).*(?2)')(time, equals(number, 1), equals(number, 2))─┐ +│ 2 │ +└─────────────────────────────────────────────────────────────────────────┘ +``` + +**Voir Aussi** + +- [sequenceMatch](#function-sequencematch) + +## fenêtrefunnel {#windowfunnel} + +Recherche les chaînes d'événements dans une fenêtre de temps coulissante et calcule le nombre maximum d'événements qui se sont produits à partir de la chaîne. + +La fonction fonctionne selon l'algorithme: + +- La fonction recherche les données qui déclenchent la première condition de la chaîne et définit le compteur d'événements sur 1. C'est le moment où la fenêtre coulissante commence. + +- Si les événements de la chaîne se produisent séquentiellement dans la fenêtre, le compteur est incrémenté. Si la séquence d'événements est perturbée, le compteur n'est pas incrémenté. + +- Si les données ont plusieurs chaînes d'événements à différents points d'achèvement, la fonction affichera uniquement la taille de la chaîne la plus longue. + +**Syntaxe** + +``` sql +windowFunnel(window, [mode])(timestamp, cond1, cond2, ..., condN) +``` + +**Paramètre** + +- `window` — Length of the sliding window in seconds. +- `mode` - C'est un argument facultatif. + - `'strict'` - Lorsque le `'strict'` est défini, le windowFunnel() applique des conditions uniquement pour les valeurs uniques. +- `timestamp` — Name of the column containing the timestamp. Data types supported: [Date](../../data_types/date.md), [DateTime](../../data_types/datetime.md#data_type-datetime) et d'autres types entiers non signés (notez que même si timestamp prend en charge le `UInt64` type, sa valeur ne peut pas dépasser le maximum Int64, qui est 2^63 - 1). +- `cond` — Conditions or data describing the chain of events. [UInt8](../../data_types/int_uint.md). + +**Valeur renvoyée** + +Nombre maximal de conditions déclenchées consécutives de la chaîne dans la fenêtre de temps de glissement. +Toutes les chaînes de la sélection sont analysés. + +Type: `Integer`. + +**Exemple** + +Déterminer si une période de temps est suffisant pour l'utilisateur de sélectionner un téléphone et d'acheter deux fois dans la boutique en ligne. + +Définissez la chaîne d'événements suivante: + +1. L'utilisateur s'est connecté à son compte sur le magasin (`eventID = 1003`). +2. L'utilisateur recherche un téléphone (`eventID = 1007, product = 'phone'`). +3. Toute commande de l'utilisateur (`eventID = 1009`). +4. L'Utilisateur a fait la commande à nouveau (`eventID = 1010`). + +Table d'entrée: + +``` text +┌─event_date─┬─user_id─┬───────────timestamp─┬─eventID─┬─product─┐ +│ 2019-01-28 │ 1 │ 2019-01-29 10:00:00 │ 1003 │ phone │ +└────────────┴─────────┴─────────────────────┴─────────┴─────────┘ +┌─event_date─┬─user_id─┬───────────timestamp─┬─eventID─┬─product─┐ +│ 2019-01-31 │ 1 │ 2019-01-31 09:00:00 │ 1007 │ phone │ +└────────────┴─────────┴─────────────────────┴─────────┴─────────┘ +┌─event_date─┬─user_id─┬───────────timestamp─┬─eventID─┬─product─┐ +│ 2019-01-30 │ 1 │ 2019-01-30 08:00:00 │ 1009 │ phone │ +└────────────┴─────────┴─────────────────────┴─────────┴─────────┘ +┌─event_date─┬─user_id─┬───────────timestamp─┬─eventID─┬─product─┐ +│ 2019-02-01 │ 1 │ 2019-02-01 08:00:00 │ 1010 │ phone │ +└────────────┴─────────┴─────────────────────┴─────────┴─────────┘ +``` + +Savoir dans quelle mesure l'utilisateur `user_id` pourrait passer à travers la chaîne dans une période en Janvier-Février de 2019. + +Requête: + +``` sql +SELECT + level, + count() AS c +FROM +( + SELECT + user_id, + windowFunnel(6048000000000000)(timestamp, eventID = 1003, eventID = 1009, eventID = 1007, eventID = 1010) AS level + FROM trend + WHERE (event_date >= '2019-01-01') AND (event_date <= '2019-02-02') + GROUP BY user_id +) +GROUP BY level +ORDER BY level ASC +``` + +Résultat: + +``` text +┌─level─┬─c─┐ +│ 4 │ 1 │ +└───────┴───┘ +``` + +## rétention {#retention} + +La fonction prend comme arguments un ensemble de conditions de 1 à 32 arguments de type `UInt8` qui indiquent si une certaine condition est remplie pour l'événement. +Toute condition peut être spécifiée comme argument (comme dans [WHERE](../../query_language/select.md#select-where)). + +Les conditions, à l'exception de la première, s'appliquent par paires: le résultat de la seconde sera vrai si la première et la deuxième sont remplies, le troisième si la première et la fird sont vraies, etc. + +**Syntaxe** + +``` sql +retention(cond1, cond2, ..., cond32); +``` + +**Paramètre** + +- `cond` — an expression that returns a `UInt8` résultat (1 ou 0). + +**Valeur renvoyée** + +Le tableau de 1 ou 0. + +- 1 — condition was met for the event. +- 0 — condition wasn't met for the event. + +Type: `UInt8`. + +**Exemple** + +Prenons un exemple de calcul de la `retention` fonction pour déterminer le trafic du site. + +**1.** Сreate a table to illustrate an example. + +``` sql +CREATE TABLE retention_test(date Date, uid Int32) ENGINE = Memory; + +INSERT INTO retention_test SELECT '2020-01-01', number FROM numbers(5); +INSERT INTO retention_test SELECT '2020-01-02', number FROM numbers(10); +INSERT INTO retention_test SELECT '2020-01-03', number FROM numbers(15); +``` + +Table d'entrée: + +Requête: + +``` sql +SELECT * FROM retention_test +``` + +Résultat: + +``` text +┌───────date─┬─uid─┐ +│ 2020-01-01 │ 0 │ +│ 2020-01-01 │ 1 │ +│ 2020-01-01 │ 2 │ +│ 2020-01-01 │ 3 │ +│ 2020-01-01 │ 4 │ +└────────────┴─────┘ +┌───────date─┬─uid─┐ +│ 2020-01-02 │ 0 │ +│ 2020-01-02 │ 1 │ +│ 2020-01-02 │ 2 │ +│ 2020-01-02 │ 3 │ +│ 2020-01-02 │ 4 │ +│ 2020-01-02 │ 5 │ +│ 2020-01-02 │ 6 │ +│ 2020-01-02 │ 7 │ +│ 2020-01-02 │ 8 │ +│ 2020-01-02 │ 9 │ +└────────────┴─────┘ +┌───────date─┬─uid─┐ +│ 2020-01-03 │ 0 │ +│ 2020-01-03 │ 1 │ +│ 2020-01-03 │ 2 │ +│ 2020-01-03 │ 3 │ +│ 2020-01-03 │ 4 │ +│ 2020-01-03 │ 5 │ +│ 2020-01-03 │ 6 │ +│ 2020-01-03 │ 7 │ +│ 2020-01-03 │ 8 │ +│ 2020-01-03 │ 9 │ +│ 2020-01-03 │ 10 │ +│ 2020-01-03 │ 11 │ +│ 2020-01-03 │ 12 │ +│ 2020-01-03 │ 13 │ +│ 2020-01-03 │ 14 │ +└────────────┴─────┘ +``` + +**2.** Grouper les utilisateurs par ID unique `uid` à l'aide de la `retention` fonction. + +Requête: + +``` sql +SELECT + uid, + retention(date = '2020-01-01', date = '2020-01-02', date = '2020-01-03') AS r +FROM retention_test +WHERE date IN ('2020-01-01', '2020-01-02', '2020-01-03') +GROUP BY uid +ORDER BY uid ASC +``` + +Résultat: + +``` text +┌─uid─┬─r───────┐ +│ 0 │ [1,1,1] │ +│ 1 │ [1,1,1] │ +│ 2 │ [1,1,1] │ +│ 3 │ [1,1,1] │ +│ 4 │ [1,1,1] │ +│ 5 │ [0,0,0] │ +│ 6 │ [0,0,0] │ +│ 7 │ [0,0,0] │ +│ 8 │ [0,0,0] │ +│ 9 │ [0,0,0] │ +│ 10 │ [0,0,0] │ +│ 11 │ [0,0,0] │ +│ 12 │ [0,0,0] │ +│ 13 │ [0,0,0] │ +│ 14 │ [0,0,0] │ +└─────┴─────────┘ +``` + +**3.** Calculer le nombre total de visites par jour. + +Requête: + +``` sql +SELECT + sum(r[1]) AS r1, + sum(r[2]) AS r2, + sum(r[3]) AS r3 +FROM +( + SELECT + uid, + retention(date = '2020-01-01', date = '2020-01-02', date = '2020-01-03') AS r + FROM retention_test + WHERE date IN ('2020-01-01', '2020-01-02', '2020-01-03') + GROUP BY uid +) +``` + +Résultat: + +``` text +┌─r1─┬─r2─┬─r3─┐ +│ 5 │ 5 │ 5 │ +└────┴────┴────┘ +``` + +Où: + +- `r1`- le nombre de visiteurs uniques qui ont visité le site au cours du 2020-01-01 (le `cond1` condition). +- `r2`- le nombre de visiteurs uniques qui ont visité le site au cours d'une période donnée entre 2020-01-01 et 2020-01-02 (`cond1` et `cond2` condition). +- `r3`- le nombre de visiteurs uniques qui ont visité le site au cours d'une période donnée entre 2020-01-01 et 2020-01-03 (`cond1` et `cond3` condition). + +## uniqUpTo (N) (x) {#uniquptonx} + +Calculates the number of different argument values ​​if it is less than or equal to N. If the number of different argument values is greater than N, it returns N + 1. + +Recommandé pour une utilisation avec de petites Ns, jusqu'à 10. La valeur maximale de N est de 100. + +Pour l'état d'une fonction d'agrégation, il utilise la quantité de mémoire égale à 1 + N \* de la taille d'une valeur d'octets. +Pour les chaînes, il stocke un hachage non cryptographique de 8 octets. Soit le calcul est approchée pour les chaînes. + +La fonction fonctionne également pour plusieurs arguments. + +Cela fonctionne aussi vite que possible, sauf dans les cas où une grande valeur N est utilisée et le nombre de valeurs uniques est légèrement inférieur à N. + +Exemple d'utilisation: + +``` text +Problem: Generate a report that shows only keywords that produced at least 5 unique users. +Solution: Write in the GROUP BY query SearchPhrase HAVING uniqUpTo(4)(UserID) >= 5 +``` + +[Article Original](https://clickhouse.tech/docs/en/query_language/agg_functions/parametric_functions/) + +## sumMapFiltered(keys\_to\_keep) (clés, valeurs) {#summapfilteredkeys-to-keepkeys-values} + +Même comportement que [sumMap](reference.md#agg_functions-summap) sauf qu'un tableau de clés est passé en paramètre. Cela peut être particulièrement utile lorsque vous travaillez avec une forte cardinalité de touches. diff --git a/docs/fr/query_language/agg_functions/reference.md b/docs/fr/query_language/agg_functions/reference.md new file mode 100644 index 00000000000..347b68dd3f4 --- /dev/null +++ b/docs/fr/query_language/agg_functions/reference.md @@ -0,0 +1,1834 @@ +--- +machine_translated: true +--- + +# La Fonction De Référence {#function-reference} + +## compter {#agg_function-count} + +Compte le nombre de lignes ou de valeurs non NULL. + +ClickHouse prend en charge les syntaxes suivantes pour `count`: +- `count(expr)` ou `COUNT(DISTINCT expr)`. +- `count()` ou `COUNT(*)`. Le `count()` la syntaxe est spécifique à ClickHouse. + +**Paramètre** + +La fonction peut prendre: + +- Zéro des paramètres. +- Un [expression](../syntax.md#syntax-expressions). + +**Valeur renvoyée** + +- Si la fonction est appelée sans paramètres, il compte le nombre de lignes. +- Si l' [expression](../syntax.md#syntax-expressions) est passé, alors la fonction compte combien de fois cette expression retournée not null. Si l'expression renvoie un [Nullable](../../data_types/nullable.md)- tapez la valeur, puis le résultat de `count` séjours pas `Nullable`. La fonction renvoie 0 si l'expression est retournée `NULL` pour toutes les lignes. + +Dans les deux cas le type de la valeur renvoyée est [UInt64](../../data_types/int_uint.md). + +**Détail** + +Clickhouse soutient le `COUNT(DISTINCT ...)` syntaxe. Le comportement de cette construction dépend de la [count\_distinct\_implementation](../../operations/settings/settings.md#settings-count_distinct_implementation) paramètre. Il définit lequel des [uniq\*](#agg_function-uniq) fonctions est utilisée pour effectuer l'opération. La valeur par défaut est la [uniqExact](#agg_function-uniqexact) fonction. + +Le `SELECT count() FROM table` la requête n'est pas optimisé, car le nombre d'entrées dans la table n'est pas stockée séparément. Il choisit une petite colonne de la table et compte le nombre de valeurs qu'il contient. + +**Exemple** + +Exemple 1: + +``` sql +SELECT count() FROM t +``` + +``` text +┌─count()─┐ +│ 5 │ +└─────────┘ +``` + +Exemple 2: + +``` sql +SELECT name, value FROM system.settings WHERE name = 'count_distinct_implementation' +``` + +``` text +┌─name──────────────────────────┬─value─────┐ +│ count_distinct_implementation │ uniqExact │ +└───────────────────────────────┴───────────┘ +``` + +``` sql +SELECT count(DISTINCT num) FROM t +``` + +``` text +┌─uniqExact(num)─┐ +│ 3 │ +└────────────────┘ +``` + +Cet exemple montre que `count(DISTINCT num)` est effectuée par le `uniqExact` en fonction de l' `count_distinct_implementation` valeur de réglage. + +## tout(x) {#agg_function-any} + +Sélectionne la première valeur rencontrée. +La requête peut être exécutée dans n'importe quel ordre, et même dans un ordre différent à chaque fois, de sorte que le résultat de cette fonction est indéterminée. +Pour obtenir un résultat déterminé, vous pouvez utiliser le ‘min’ ou ‘max’ fonction au lieu de ‘any’. + +Dans certains cas, vous pouvez compter sur l'ordre de l'exécution. Cela s'applique aux cas où SELECT provient d'une sous-requête qui utilise ORDER BY. + +Lorsqu'un `SELECT` la requête a l' `GROUP BY` ou au moins une fonction d'agrégat, ClickHouse (contrairement à MySQL) exige que toutes les expressions du `SELECT`, `HAVING`, et `ORDER BY` clauses être calculée à partir de clés ou de fonctions d'agrégation. En d'autres termes, chaque colonne sélectionnée dans la table doit être utilisée soit dans les clés, soit dans les fonctions d'agrégation. Pour obtenir un comportement comme dans MySQL, vous pouvez mettre les autres colonnes dans le `any` fonction d'agrégation. + +## anyHeavy (x) {#anyheavyx} + +Sélectionne une valeur fréquente à l'aide [poids lourds](http://www.cs.umd.edu/~samir/498/karp.pdf) algorithme. S'il y a une valeur qui se produit plus de la moitié des cas dans chacun des threads d'exécution de la requête, cette valeur est renvoyée. Normalement, le résultat est non déterministe. + +``` sql +anyHeavy(column) +``` + +**Argument** + +- `column` – The column name. + +**Exemple** + +Prendre la [OnTime](../../getting_started/example_datasets/ontime.md) ensemble de données et sélectionnez n'importe quelle valeur `AirlineID` colonne. + +``` sql +SELECT anyHeavy(AirlineID) AS res +FROM ontime +``` + +``` text +┌───res─┐ +│ 19690 │ +└───────┘ +``` + +## anyLast (x) {#anylastx} + +Sélectionne la dernière valeur rencontrés. +Le résultat est tout aussi indéterminé que pour le `any` fonction. + +## groupBitAnd {#groupbitand} + +S'applique au niveau du BIT `AND` pour les séries de nombres. + +``` sql +groupBitAnd(expr) +``` + +**Paramètre** + +`expr` – An expression that results in `UInt*` type. + +**Valeur de retour** + +La valeur de la `UInt*` type. + +**Exemple** + +Des données de Test: + +``` text +binary decimal +00101100 = 44 +00011100 = 28 +00001101 = 13 +01010101 = 85 +``` + +Requête: + +``` sql +SELECT groupBitAnd(num) FROM t +``` + +Où `num` est la colonne avec les données de test. + +Résultat: + +``` text +binary decimal +00000100 = 4 +``` + +## groupBitOr {#groupbitor} + +S'applique au niveau du BIT `OR` pour les séries de nombres. + +``` sql +groupBitOr(expr) +``` + +**Paramètre** + +`expr` – An expression that results in `UInt*` type. + +**Valeur de retour** + +La valeur de la `UInt*` type. + +**Exemple** + +Des données de Test: + +``` text +binary decimal +00101100 = 44 +00011100 = 28 +00001101 = 13 +01010101 = 85 +``` + +Requête: + +``` sql +SELECT groupBitOr(num) FROM t +``` + +Où `num` est la colonne avec les données de test. + +Résultat: + +``` text +binary decimal +01111101 = 125 +``` + +## groupBitXor {#groupbitxor} + +S'applique au niveau du BIT `XOR` pour les séries de nombres. + +``` sql +groupBitXor(expr) +``` + +**Paramètre** + +`expr` – An expression that results in `UInt*` type. + +**Valeur de retour** + +La valeur de la `UInt*` type. + +**Exemple** + +Des données de Test: + +``` text +binary decimal +00101100 = 44 +00011100 = 28 +00001101 = 13 +01010101 = 85 +``` + +Requête: + +``` sql +SELECT groupBitXor(num) FROM t +``` + +Où `num` est la colonne avec les données de test. + +Résultat: + +``` text +binary decimal +01101000 = 104 +``` + +## groupBitmap {#groupbitmap} + +Calculs Bitmap ou agrégés à partir d'une colonne entière non signée, retour cardinalité de type UInt64, si Ajouter suffixe-State, puis retour [objet bitmap](../functions/bitmap_functions.md). + +``` sql +groupBitmap(expr) +``` + +**Paramètre** + +`expr` – An expression that results in `UInt*` type. + +**Valeur de retour** + +La valeur de la `UInt64` type. + +**Exemple** + +Des données de Test: + +``` text +UserID +1 +1 +2 +3 +``` + +Requête: + +``` sql +SELECT groupBitmap(UserID) as num FROM t +``` + +Résultat: + +``` text +num +3 +``` + +## min (x) {#agg_function-min} + +Calcule le minimum. + +## max (x) {#agg_function-max} + +Calcule le maximum. + +## argMin (arg, val) {#agg-function-argmin} + +Calcule la ‘arg’ valeur pour un minimum ‘val’ valeur. S'il y a plusieurs valeurs différentes de ‘arg’ pour des valeurs minimales de ‘val’ la première de ces valeurs rencontrées est de sortie. + +**Exemple:** + +``` text +┌─user─────┬─salary─┐ +│ director │ 5000 │ +│ manager │ 3000 │ +│ worker │ 1000 │ +└──────────┴────────┘ +``` + +``` sql +SELECT argMin(user, salary) FROM salary +``` + +``` text +┌─argMin(user, salary)─┐ +│ worker │ +└──────────────────────┘ +``` + +## argMax(arg, val) {#agg-function-argmax} + +Calcule la ‘arg’ valeur pour un maximum ‘val’ valeur. S'il y a plusieurs valeurs différentes de ‘arg’ pour les valeurs maximales de ‘val’ la première de ces valeurs rencontrées est de sortie. + +## sum(x) {#agg_function-sum} + +Calcule la somme. +Ne fonctionne que pour les numéros. + +## sumWithOverflow (x) {#sumwithoverflowx} + +Calcule la somme des nombres, en utilisant le même type de données pour le résultat que pour les paramètres d'entrée. Si la somme dépasse la valeur maximale pour ce type de données, la fonction renvoie une erreur. + +Ne fonctionne que pour les numéros. + +## sumMap (clé, valeur) {#agg_functions-summap} + +Les totaux de la ‘value’ tableau selon les clés spécifiés dans le ‘key’ tableau. +Le nombre d'éléments dans ‘key’ et ‘value’ doit être identique pour chaque ligne totalisée. +Returns a tuple of two arrays: keys in sorted order, and values ​​summed for the corresponding keys. + +Exemple: + +``` sql +CREATE TABLE sum_map( + date Date, + timeslot DateTime, + statusMap Nested( + status UInt16, + requests UInt64 + ) +) ENGINE = Log; +INSERT INTO sum_map VALUES + ('2000-01-01', '2000-01-01 00:00:00', [1, 2, 3], [10, 10, 10]), + ('2000-01-01', '2000-01-01 00:00:00', [3, 4, 5], [10, 10, 10]), + ('2000-01-01', '2000-01-01 00:01:00', [4, 5, 6], [10, 10, 10]), + ('2000-01-01', '2000-01-01 00:01:00', [6, 7, 8], [10, 10, 10]); +SELECT + timeslot, + sumMap(statusMap.status, statusMap.requests) +FROM sum_map +GROUP BY timeslot +``` + +``` text +┌────────────timeslot─┬─sumMap(statusMap.status, statusMap.requests)─┐ +│ 2000-01-01 00:00:00 │ ([1,2,3,4,5],[10,10,20,10,10]) │ +│ 2000-01-01 00:01:00 │ ([4,5,6,7,8],[10,10,20,10,10]) │ +└─────────────────────┴──────────────────────────────────────────────┘ +``` + +## skewPop {#skewpop} + +Calcule la [asymétrie](https://en.wikipedia.org/wiki/Skewness) d'une séquence. + +``` sql +skewPop(expr) +``` + +**Paramètre** + +`expr` — [Expression](../syntax.md#syntax-expressions) retour d'un nombre. + +**Valeur renvoyée** + +The skewness of the given distribution. Type — [Float64](../../data_types/float.md) + +**Exemple** + +``` sql +SELECT skewPop(value) FROM series_with_value_column +``` + +## skewSamp {#skewsamp} + +Calcule la [asymétrie de l'échantillon](https://en.wikipedia.org/wiki/Skewness) d'une séquence. + +Il représente une estimation non biaisée de l'asymétrie d'une variable aléatoire si les valeurs passées forme de son échantillon. + +``` sql +skewSamp(expr) +``` + +**Paramètre** + +`expr` — [Expression](../syntax.md#syntax-expressions) retour d'un nombre. + +**Valeur renvoyée** + +The skewness of the given distribution. Type — [Float64](../../data_types/float.md). Si `n <= 1` (`n` est la taille de l'échantillon), alors la fonction renvoie `nan`. + +**Exemple** + +``` sql +SELECT skewSamp(value) FROM series_with_value_column +``` + +## kurtPop {#kurtpop} + +Calcule la [kurtosis](https://en.wikipedia.org/wiki/Kurtosis) d'une séquence. + +``` sql +kurtPop(expr) +``` + +**Paramètre** + +`expr` — [Expression](../syntax.md#syntax-expressions) retour d'un nombre. + +**Valeur renvoyée** + +The kurtosis of the given distribution. Type — [Float64](../../data_types/float.md) + +**Exemple** + +``` sql +SELECT kurtPop(value) FROM series_with_value_column +``` + +## kurtSamp {#kurtsamp} + +Calcule la [l'échantillon le coefficient d'aplatissement](https://en.wikipedia.org/wiki/Kurtosis) d'une séquence. + +Il représente une estimation non biaisée de la kurtose d'une variable aléatoire si les valeurs passées forment son échantillon. + +``` sql +kurtSamp(expr) +``` + +**Paramètre** + +`expr` — [Expression](../syntax.md#syntax-expressions) retour d'un nombre. + +**Valeur renvoyée** + +The kurtosis of the given distribution. Type — [Float64](../../data_types/float.md). Si `n <= 1` (`n` la taille de l'échantillon), alors la fonction renvoie `nan`. + +**Exemple** + +``` sql +SELECT kurtSamp(value) FROM series_with_value_column +``` + +## timeSeriesGroupSum(uid, horodatage, valeur) {#agg-function-timeseriesgroupsum} + +`timeSeriesGroupSum` peut agréger différentes séries temporelles qui échantillonnent l'horodatage et non l'alignement. +Il utilisera une interpolation linéaire entre deux échantillons d'horodatage, puis additionnera les séries temporelles ensemble. + +- `uid` la série temporelle est elle unique, `UInt64`. +- `timestamp` est de type Int64 afin de prendre en charge la milliseconde ou la microseconde. +- `value` est la métrique. + +La fonction renvoie un tableau de tuples avec `(timestamp, aggregated_value)` pair. + +Avant d'utiliser cette fonction, assurez-vous `timestamp` est dans l'ordre croissant. + +Exemple: + +``` text +┌─uid─┬─timestamp─┬─value─┐ +│ 1 │ 2 │ 0.2 │ +│ 1 │ 7 │ 0.7 │ +│ 1 │ 12 │ 1.2 │ +│ 1 │ 17 │ 1.7 │ +│ 1 │ 25 │ 2.5 │ +│ 2 │ 3 │ 0.6 │ +│ 2 │ 8 │ 1.6 │ +│ 2 │ 12 │ 2.4 │ +│ 2 │ 18 │ 3.6 │ +│ 2 │ 24 │ 4.8 │ +└─────┴───────────┴───────┘ +``` + +``` sql +CREATE TABLE time_series( + uid UInt64, + timestamp Int64, + value Float64 +) ENGINE = Memory; +INSERT INTO time_series VALUES + (1,2,0.2),(1,7,0.7),(1,12,1.2),(1,17,1.7),(1,25,2.5), + (2,3,0.6),(2,8,1.6),(2,12,2.4),(2,18,3.6),(2,24,4.8); + +SELECT timeSeriesGroupSum(uid, timestamp, value) +FROM ( + SELECT * FROM time_series order by timestamp ASC +); +``` + +Et le résultat sera: + +``` text +[(2,0.2),(3,0.9),(7,2.1),(8,2.4),(12,3.6),(17,5.1),(18,5.4),(24,7.2),(25,2.5)] +``` + +## timeSeriesGroupRateSum(uid, ts, val) {#agg-function-timeseriesgroupratesum} + +De même timeSeriesGroupRateSum, timeSeriesGroupRateSum calculera le taux de séries temporelles, puis additionnera les taux ensemble. +En outre, l'horodatage doit être dans l'ordre croissant avant d'utiliser cette fonction. + +Utilisez cette fonction, le résultat ci-dessus sera: + +``` text +[(2,0),(3,0.1),(7,0.3),(8,0.3),(12,0.3),(17,0.3),(18,0.3),(24,0.3),(25,0.1)] +``` + +## avg (x) {#agg_function-avg} + +Calcule la moyenne. +Ne fonctionne que pour les numéros. +Le résultat est toujours Float64. + +## uniq {#agg_function-uniq} + +Calcule le nombre approximatif des différentes valeurs de l'argument. + +``` sql +uniq(x[, ...]) +``` + +**Paramètre** + +La fonction prend un nombre variable de paramètres. Les paramètres peuvent être `Tuple`, `Array`, `Date`, `DateTime`, `String` ou des types numériques. + +**Valeur renvoyée** + +- A [UInt64](../../data_types/int_uint.md)numéro de type. + +**Détails de mise en œuvre** + +Fonction: + +- Calcule un hachage pour tous les paramètres de l'agrégat, puis l'utilise dans les calculs. + +- Utilise un algorithme d'échantillonnage adaptatif. Pour l'état de calcul, La fonction utilise un échantillon de valeurs de hachage d'éléments jusqu'à 65536. + + This algorithm is very accurate and very efficient on the CPU. When the query contains several of these functions, using `uniq` is almost as fast as using other aggregate functions. + +- Fournit le résultat de manière déterministe (cela ne dépend pas de l'ordre de traitement de la requête). + +Nous vous recommandons d'utiliser cette fonction dans presque tous les scénarios. + +**Voir Aussi** + +- [uniqcombiné](#agg_function-uniqcombined) +- [uniqCombined64](#agg_function-uniqcombined64) +- [uniqHLL12](#agg_function-uniqhll12) +- [uniqExact](#agg_function-uniqexact) + +## uniqcombiné {#agg_function-uniqcombined} + +Calcule le nombre approximatif de différentes valeurs d'argument. + +``` sql +uniqCombined(HLL_precision)(x[, ...]) +``` + +Le `uniqCombined` la fonction est un bon choix pour calculer le nombre de valeurs différentes. + +**Paramètre** + +La fonction prend un nombre variable de paramètres. Les paramètres peuvent être `Tuple`, `Array`, `Date`, `DateTime`, `String` ou des types numériques. + +`HLL_precision` est le logarithme en base 2 du nombre de cellules dans [HyperLogLog](https://en.wikipedia.org/wiki/HyperLogLog). Facultatif, vous pouvez utiliser la fonction comme `uniqCombined(x[, ...])`. La valeur par défaut pour `HLL_precision` est 17, qui est effectivement 96 Ko d'espace(2 ^ 17 cellules, 6 bits chacune). + +**Valeur renvoyée** + +- Nombre [UInt64](../../data_types/int_uint.md)numéro de type. + +**Détails de mise en œuvre** + +Fonction: + +- Calcule un hachage (hachage 64 bits pour `String` et 32 bits sinon) pour tous les paramètres dans l'agrégat, puis l'utilise dans les calculs. + +- Utilise une combinaison de trois algorithmes: tableau, table de hachage et HyperLogLog avec une table de correction d'erreur. + + For a small number of distinct elements, an array is used. When the set size is larger, a hash table is used. For a larger number of elements, HyperLogLog is used, which will occupy a fixed amount of memory. + +- Fournit le résultat de manière déterministe (cela ne dépend pas de l'ordre de traitement de la requête). + +!!! note "Note" + Comme il utilise le hachage 32 bits pour non-`String` type, le résultat aura une erreur très élevée pour les cardinalités significativement plus grandes que `UINT_MAX` (erreur va augmenter rapidement après quelques dizaines de milliards de valeurs distinctes), donc dans ce cas, vous devez utiliser [uniqCombined64](#agg_function-uniqcombined64) + +Par rapport à la [uniq](#agg_function-uniq) la fonction, la `uniqCombined`: + +- Consomme plusieurs fois moins de mémoire. +- Calcule avec plusieurs fois plus de précision. +- A généralement des performances légèrement inférieures. Dans certains scénarios, `uniqCombined` peut faire mieux que `uniq` par exemple, avec des requêtes distribuées qui transmettent un grand nombre d'agrégation des états sur le réseau. + +**Voir Aussi** + +- [uniq](#agg_function-uniq) +- [uniqCombined64](#agg_function-uniqcombined64) +- [uniqHLL12](#agg_function-uniqhll12) +- [uniqExact](#agg_function-uniqexact) + +## uniqCombined64 {#agg_function-uniqcombined64} + +Même que [uniqcombiné](#agg_function-uniqcombined), mais utilise le hachage 64 bits pour tous les types de données. + +## uniqHLL12 {#agg_function-uniqhll12} + +Calcule le nombre approximatif de différentes valeurs d'argument, en utilisant [HyperLogLog](https://en.wikipedia.org/wiki/HyperLogLog) algorithme. + +``` sql +uniqHLL12(x[, ...]) +``` + +**Paramètre** + +La fonction prend un nombre variable de paramètres. Les paramètres peuvent être `Tuple`, `Array`, `Date`, `DateTime`, `String` ou des types numériques. + +**Valeur renvoyée** + +- A [UInt64](../../data_types/int_uint.md)numéro de type. + +**Détails de mise en œuvre** + +Fonction: + +- Calcule un hachage pour tous les paramètres de l'agrégat, puis l'utilise dans les calculs. + +- Utilise L'algorithme HyperLogLog pour approximer le nombre de valeurs d'argument différentes. + + 212 5-bit cells are used. The size of the state is slightly more than 2.5 KB. The result is not very accurate (up to ~10% error) for small data sets (<10K elements). However, the result is fairly accurate for high-cardinality data sets (10K-100M), with a maximum error of ~1.6%. Starting from 100M, the estimation error increases, and the function will return very inaccurate results for data sets with extremely high cardinality (1B+ elements). + +- Fournit le résultat déterminé (il ne dépend pas de l'ordre de traitement de la requête). + +Nous ne recommandons pas d'utiliser cette fonction. Dans la plupart des cas, l'utilisation de la [uniq](#agg_function-uniq) ou [uniqcombiné](#agg_function-uniqcombined) fonction. + +**Voir Aussi** + +- [uniq](#agg_function-uniq) +- [uniqcombiné](#agg_function-uniqcombined) +- [uniqExact](#agg_function-uniqexact) + +## uniqExact {#agg_function-uniqexact} + +Calcule le nombre exact de différentes valeurs d'argument. + +``` sql +uniqExact(x[, ...]) +``` + +L'utilisation de la `uniqExact` fonction si vous avez absolument besoin d'un résultat exact. Sinon l'utilisation de la [uniq](#agg_function-uniq) fonction. + +Le `uniqExact` la fonction utilise plus de mémoire que `uniq` parce que la taille de l'état a surabondance de croissance que le nombre de valeurs différentes augmente. + +**Paramètre** + +La fonction prend un nombre variable de paramètres. Les paramètres peuvent être `Tuple`, `Array`, `Date`, `DateTime`, `String` ou des types numériques. + +**Voir Aussi** + +- [uniq](#agg_function-uniq) +- [uniqcombiné](#agg_function-uniqcombined) +- [uniqHLL12](#agg_function-uniqhll12) + +## groupArray(x), groupArray (max\_size) (x) {#agg_function-grouparray} + +Crée un tableau de valeurs de l'argument. +Les valeurs peuvent être ajoutées au tableau dans une (indéterminée) de commande. + +La deuxième version (avec le `max_size` paramètre) limite la taille du tableau résultant à `max_size` élément. +Exemple, `groupArray (1) (x)` est équivalent à `[any (x)]`. + +Dans certains cas, vous pouvez toujours compter sur l'ordre de l'exécution. Cela s'applique aux cas où `SELECT` provient d'une sous-requête qui utilise `ORDER BY`. + +## groupeparrayinsertat(valeur, position) {#grouparrayinsertatvalue-position} + +Insère une valeur dans le tableau à la position spécifiée. + +!!! note "Note" + Cette fonction utilise des positions à base zéro, contrairement aux positions à base unique classiques pour les tableaux SQL. + +Accepts the value and position as input. If several values ​​are inserted into the same position, any of them might end up in the resulting array (the first one will be used in the case of single-threaded execution). If no value is inserted into a position, the position is assigned the default value. + +Paramètres facultatifs: + +- Valeur par défaut pour la substitution dans des positions vides. +- La longueur du tableau résultant. Cela vous permet de recevoir des tableaux de la même taille pour tous les agrégats clés. Lorsque vous utilisez ce paramètre, la valeur par défaut doit être spécifiée. + +## groupeparraymovingsum {#agg_function-grouparraymovingsum} + +Calcule la somme mobile des valeurs d'entrée. + +``` sql +groupArrayMovingSum(numbers_for_summing) +groupArrayMovingSum(window_size)(numbers_for_summing) +``` + +La fonction peut prendre la taille de la fenêtre comme paramètre. Si spécifié, la fonction prend la taille de la fenêtre égal au nombre de lignes dans la colonne. + +**Paramètre** + +- `numbers_for_summing` — [Expression](../syntax.md#syntax-expressions) résultant en une valeur de type de données Numérique. +- `window_size` — Size of the calculation window. + +**Valeurs renvoyées** + +- Tableau de la même taille et de même type que les données d'entrée. + +**Exemple** + +La table d'échantillon: + +``` sql +CREATE TABLE t +( + `int` UInt8, + `float` Float32, + `dec` Decimal32(2) +) +ENGINE = TinyLog +``` + +``` text +┌─int─┬─float─┬──dec─┐ +│ 1 │ 1.1 │ 1.10 │ +│ 2 │ 2.2 │ 2.20 │ +│ 4 │ 4.4 │ 4.40 │ +│ 7 │ 7.77 │ 7.77 │ +└─────┴───────┴──────┘ +``` + +Requête: + +``` sql +SELECT + groupArrayMovingSum(int) AS I, + groupArrayMovingSum(float) AS F, + groupArrayMovingSum(dec) AS D +FROM t +``` + +``` text +┌─I──────────┬─F───────────────────────────────┬─D──────────────────────┐ +│ [1,3,7,14] │ [1.1,3.3000002,7.7000003,15.47] │ [1.10,3.30,7.70,15.47] │ +└────────────┴─────────────────────────────────┴────────────────────────┘ +``` + +``` sql +SELECT + groupArrayMovingSum(2)(int) AS I, + groupArrayMovingSum(2)(float) AS F, + groupArrayMovingSum(2)(dec) AS D +FROM t +``` + +``` text +┌─I──────────┬─F───────────────────────────────┬─D──────────────────────┐ +│ [1,3,6,11] │ [1.1,3.3000002,6.6000004,12.17] │ [1.10,3.30,6.60,12.17] │ +└────────────┴─────────────────────────────────┴────────────────────────┘ +``` + +## groupArrayMovingAvg {#agg_function-grouparraymovingavg} + +Calcule la moyenne mobile des valeurs d'entrée. + +``` sql +groupArrayMovingAvg(numbers_for_summing) +groupArrayMovingAvg(window_size)(numbers_for_summing) +``` + +La fonction peut prendre la taille de la fenêtre comme paramètre. Si spécifié, la fonction prend la taille de la fenêtre égal au nombre de lignes dans la colonne. + +**Paramètre** + +- `numbers_for_summing` — [Expression](../syntax.md#syntax-expressions) résultant en une valeur de type de données Numérique. +- `window_size` — Size of the calculation window. + +**Valeurs renvoyées** + +- Tableau de la même taille et de même type que les données d'entrée. + +La fonction utilise [l'arrondi vers zéro](https://en.wikipedia.org/wiki/Rounding#Rounding_towards_zero). Il tronque les décimales insignifiantes pour le type de données résultant. + +**Exemple** + +La table d'échantillon `b`: + +``` sql +CREATE TABLE t +( + `int` UInt8, + `float` Float32, + `dec` Decimal32(2) +) +ENGINE = TinyLog +``` + +``` text +┌─int─┬─float─┬──dec─┐ +│ 1 │ 1.1 │ 1.10 │ +│ 2 │ 2.2 │ 2.20 │ +│ 4 │ 4.4 │ 4.40 │ +│ 7 │ 7.77 │ 7.77 │ +└─────┴───────┴──────┘ +``` + +Requête: + +``` sql +SELECT + groupArrayMovingAvg(int) AS I, + groupArrayMovingAvg(float) AS F, + groupArrayMovingAvg(dec) AS D +FROM t +``` + +``` text +┌─I─────────┬─F───────────────────────────────────┬─D─────────────────────┐ +│ [0,0,1,3] │ [0.275,0.82500005,1.9250001,3.8675] │ [0.27,0.82,1.92,3.86] │ +└───────────┴─────────────────────────────────────┴───────────────────────┘ +``` + +``` sql +SELECT + groupArrayMovingAvg(2)(int) AS I, + groupArrayMovingAvg(2)(float) AS F, + groupArrayMovingAvg(2)(dec) AS D +FROM t +``` + +``` text +┌─I─────────┬─F────────────────────────────────┬─D─────────────────────┐ +│ [0,1,3,5] │ [0.55,1.6500001,3.3000002,6.085] │ [0.55,1.65,3.30,6.08] │ +└───────────┴──────────────────────────────────┴───────────────────────┘ +``` + +## groupUniqArray(x), groupUniqArray (max\_size) (x) {#groupuniqarrayx-groupuniqarraymax-sizex} + +Crée un tableau à partir de différentes valeurs d'argument. La consommation de mémoire est la même que pour la `uniqExact` fonction. + +La deuxième version (avec le `max_size` paramètre) limite la taille du tableau résultant à `max_size` élément. +Exemple, `groupUniqArray(1)(x)` est équivalent à `[any(x)]`. + +## quantile {#quantile} + +Calcule une approximation [quantile](https://en.wikipedia.org/wiki/Quantile) des données numériques de la séquence. + +Cette fonction s'applique [réservoir d'échantillonnage](https://en.wikipedia.org/wiki/Reservoir_sampling) avec une taille de réservoir jusqu'à 8192 et un générateur de nombres aléatoires pour l'échantillonnage. Le résultat est non-déterministe. Pour obtenir un quantile exact, Utilisez le [quantileExact](#quantileexact) fonction. + +Lorsque vous utilisez plusieurs `quantile*` fonctionne avec différents niveaux dans une requête, les états internes ne sont pas combinées (qui est, la requête fonctionne moins efficacement qu'il le pouvait). Dans ce cas, utilisez la [les quantiles](#quantiles) fonction. + +**Syntaxe** + +``` sql +quantile(level)(expr) +``` + +Alias: `median`. + +**Paramètre** + +- `level` — Level of quantile. Optional parameter. Constant floating-point number from 0 to 1. We recommend using a `level` la valeur dans la plage de `[0.01, 0.99]`. Valeur par défaut: 0.5. À `level=0.5` la fonction calcule [médian](https://en.wikipedia.org/wiki/Median). +- `expr` — Expression over the column values resulting in numeric [types de données](../../data_types/index.md#data_types), [Date](../../data_types/date.md) ou [DateTime](../../data_types/datetime.md). + +**Valeur renvoyée** + +- Approximative de quantiles de niveau spécifié. + +Type: + +- [Float64](../../data_types/float.md) pour l'entrée de type de données numériques. +- [Date](../../data_types/date.md) si les valeurs d'entrée ont le `Date` type. +- [DateTime](../../data_types/datetime.md) si les valeurs d'entrée ont le `DateTime` type. + +**Exemple** + +Table d'entrée: + +``` text +┌─val─┐ +│ 1 │ +│ 1 │ +│ 2 │ +│ 3 │ +└─────┘ +``` + +Requête: + +``` sql +SELECT quantile(val) FROM t +``` + +Résultat: + +``` text +┌─quantile(val)─┐ +│ 1.5 │ +└───────────────┘ +``` + +**Voir Aussi** + +- [médian](#median) +- [les quantiles](#quantiles) + +## quantileDeterministic {#quantiledeterministic} + +Calcule une approximation [quantile](https://en.wikipedia.org/wiki/Quantile) des données numériques de la séquence. + +Cette fonction s'applique [réservoir d'échantillonnage](https://en.wikipedia.org/wiki/Reservoir_sampling) avec une taille de réservoir jusqu'à 8192 et un algorithme déterministe d'échantillonnage. Le résultat est déterministe. Pour obtenir un quantile exact, Utilisez le [quantileExact](#quantileexact) fonction. + +Lorsque vous utilisez plusieurs `quantile*` fonctionne avec différents niveaux dans une requête, les états internes ne sont pas combinées (qui est, la requête fonctionne moins efficacement qu'il le pouvait). Dans ce cas, utilisez la [les quantiles](#quantiles) fonction. + +**Syntaxe** + +``` sql +quantileDeterministic(level)(expr, determinator) +``` + +Alias: `medianDeterministic`. + +**Paramètre** + +- `level` — Level of quantile. Optional parameter. Constant floating-point number from 0 to 1. We recommend using a `level` la valeur dans la plage de `[0.01, 0.99]`. Valeur par défaut: 0.5. À `level=0.5` la fonction calcule [médian](https://en.wikipedia.org/wiki/Median). +- `expr` — Expression over the column values resulting in numeric [types de données](../../data_types/index.md#data_types), [Date](../../data_types/date.md) ou [DateTime](../../data_types/datetime.md). +- `determinator` — Number whose hash is used instead of a random number generator in the reservoir sampling algorithm to make the result of sampling deterministic. As a determinator you can use any deterministic positive number, for example, a user id or an event id. If the same determinator value occures too often, the function works incorrectly. + +**Valeur renvoyée** + +- Approximative de quantiles de niveau spécifié. + +Type: + +- [Float64](../../data_types/float.md) pour l'entrée de type de données numériques. +- [Date](../../data_types/date.md) si les valeurs d'entrée ont le `Date` type. +- [DateTime](../../data_types/datetime.md) si les valeurs d'entrée ont le `DateTime` type. + +**Exemple** + +Table d'entrée: + +``` text +┌─val─┐ +│ 1 │ +│ 1 │ +│ 2 │ +│ 3 │ +└─────┘ +``` + +Requête: + +``` sql +SELECT quantileDeterministic(val, 1) FROM t +``` + +Résultat: + +``` text +┌─quantileDeterministic(val, 1)─┐ +│ 1.5 │ +└───────────────────────────────┘ +``` + +**Voir Aussi** + +- [médian](#median) +- [les quantiles](#quantiles) + +## quantileExact {#quantileexact} + +Exactement calcule l' [quantile](https://en.wikipedia.org/wiki/Quantile) des données numériques de la séquence. + +To get exact value, all the passed values ​​are combined into an array, which is then partially sorted. Therefore, the function consumes `O(n)` de mémoire, où `n` est un nombre de valeurs qui ont été passées. Cependant, pour un petit nombre de valeurs, la fonction est très efficace. + +Lorsque vous utilisez plusieurs `quantile*` fonctionne avec différents niveaux dans une requête, les états internes ne sont pas combinées (qui est, la requête fonctionne moins efficacement qu'il le pouvait). Dans ce cas, utilisez la [les quantiles](#quantiles) fonction. + +**Syntaxe** + +``` sql +quantileExact(level)(expr) +``` + +Alias: `medianExact`. + +**Paramètre** + +- `level` — Level of quantile. Optional parameter. Constant floating-point number from 0 to 1. We recommend using a `level` la valeur dans la plage de `[0.01, 0.99]`. Valeur par défaut: 0.5. À `level=0.5` la fonction calcule [médian](https://en.wikipedia.org/wiki/Median). +- `expr` — Expression over the column values resulting in numeric [types de données](../../data_types/index.md#data_types), [Date](../../data_types/date.md) ou [DateTime](../../data_types/datetime.md). + +**Valeur renvoyée** + +- Quantiles de niveau spécifié. + +Type: + +- [Float64](../../data_types/float.md) pour l'entrée de type de données numériques. +- [Date](../../data_types/date.md) si les valeurs d'entrée ont le `Date` type. +- [DateTime](../../data_types/datetime.md) si les valeurs d'entrée ont le `DateTime` type. + +**Exemple** + +Requête: + +``` sql +SELECT quantileExact(number) FROM numbers(10) +``` + +Résultat: + +``` text +┌─quantileExact(number)─┐ +│ 5 │ +└───────────────────────┘ +``` + +**Voir Aussi** + +- [médian](#median) +- [les quantiles](#quantiles) + +## quantileExactWeighted {#quantileexactweighted} + +Exactement calcule l' [quantile](https://en.wikipedia.org/wiki/Quantile) d'une séquence de données numériques, en tenant compte du poids de chaque élément. + +To get exact value, all the passed values ​​are combined into an array, which is then partially sorted. Each value is counted with its weight, as if it is present `weight` times. A hash table is used in the algorithm. Because of this, if the passed values ​​are frequently repeated, the function consumes less RAM than [quantileExact](#quantileexact). Vous pouvez utiliser cette fonction au lieu de `quantileExact` et spécifiez le poids 1. + +Lorsque vous utilisez plusieurs `quantile*` fonctionne avec différents niveaux dans une requête, les états internes ne sont pas combinées (qui est, la requête fonctionne moins efficacement qu'il le pouvait). Dans ce cas, utilisez la [les quantiles](#quantiles) fonction. + +**Syntaxe** + +``` sql +quantileExactWeighted(level)(expr, weight) +``` + +Alias: `medianExactWeighted`. + +**Paramètre** + +- `level` — Level of quantile. Optional parameter. Constant floating-point number from 0 to 1. We recommend using a `level` la valeur dans la plage de `[0.01, 0.99]`. Valeur par défaut: 0.5. À `level=0.5` la fonction calcule [médian](https://en.wikipedia.org/wiki/Median). +- `expr` — Expression over the column values resulting in numeric [types de données](../../data_types/index.md#data_types), [Date](../../data_types/date.md) ou [DateTime](../../data_types/datetime.md). +- `weight` — Column with weights of sequence members. Weight is a number of value occurrences. + +**Valeur renvoyée** + +- Quantiles de niveau spécifié. + +Type: + +- [Float64](../../data_types/float.md) pour l'entrée de type de données numériques. +- [Date](../../data_types/date.md) si les valeurs d'entrée ont le `Date` type. +- [DateTime](../../data_types/datetime.md) si les valeurs d'entrée ont le `DateTime` type. + +**Exemple** + +Table d'entrée: + +``` text +┌─n─┬─val─┐ +│ 0 │ 3 │ +│ 1 │ 2 │ +│ 2 │ 1 │ +│ 5 │ 4 │ +└───┴─────┘ +``` + +Requête: + +``` sql +SELECT quantileExactWeighted(n, val) FROM t +``` + +Résultat: + +``` text +┌─quantileExactWeighted(n, val)─┐ +│ 1 │ +└───────────────────────────────┘ +``` + +**Voir Aussi** + +- [médian](#median) +- [les quantiles](#quantiles) + +## quantileTiming {#quantiletiming} + +Avec la précision déterminée calcule le [quantile](https://en.wikipedia.org/wiki/Quantile) des données numériques de la séquence. + +Le résultat est déterministe (il ne dépend pas de l'ordre de traitement de la requête). La fonction est optimisée pour travailler avec des séquences qui décrivent des distributions comme les temps de chargement des pages web ou les temps de réponse du backend. + +Lorsque vous utilisez plusieurs `quantile*` fonctionne avec différents niveaux dans une requête, les états internes ne sont pas combinées (qui est, la requête fonctionne moins efficacement qu'il le pouvait). Dans ce cas, utilisez la [les quantiles](#quantiles) fonction. + +**Syntaxe** + +``` sql +quantileTiming(level)(expr) +``` + +Alias: `medianTiming`. + +**Paramètre** + +- `level` — Level of quantile. Optional parameter. Constant floating-point number from 0 to 1. We recommend using a `level` la valeur dans la plage de `[0.01, 0.99]`. Valeur par défaut: 0.5. À `level=0.5` la fonction calcule [médian](https://en.wikipedia.org/wiki/Median). + +- `expr` — [Expression](../syntax.md#syntax-expressions) sur une colonne Valeurs renvoyant un [Flottant\*](../../data_types/float.md)numéro de type. + + - If negative values are passed to the function, the behavior is undefined. + - If the value is greater than 30,000 (a page loading time of more than 30 seconds), it is assumed to be 30,000. + +**Exactitude** + +Le calcul est précis si: + +- Le nombre Total de valeurs ne dépasse pas 5670. +- Le nombre Total de valeurs dépasse 5670, mais le temps de chargement de la page est inférieur à 1024ms. + +Sinon, le résultat du calcul est arrondi au plus proche multiple de 16 ms. + +!!! note "Note" + Pour calculer les quantiles de temps de chargement de page, cette fonction est plus efficace et précise que [quantile](#quantile). + +**Valeur renvoyée** + +- Quantiles de niveau spécifié. + +Type: `Float32`. + +!!! note "Note" + Si aucune valeur n'est transmise à la fonction (lors de l'utilisation de `quantileTimingIf`), [Nan](../../data_types/float.md#data_type-float-nan-inf) est retourné. Le but est de différencier ces cas de cas qui aboutissent à zéro. Voir [Clause ORDER BY](../select.md#select-order-by) pour des notes sur le tri `NaN` valeur. + +**Exemple** + +Table d'entrée: + +``` text +┌─response_time─┐ +│ 72 │ +│ 112 │ +│ 126 │ +│ 145 │ +│ 104 │ +│ 242 │ +│ 313 │ +│ 168 │ +│ 108 │ +└───────────────┘ +``` + +Requête: + +``` sql +SELECT quantileTiming(response_time) FROM t +``` + +Résultat: + +``` text +┌─quantileTiming(response_time)─┐ +│ 126 │ +└───────────────────────────────┘ +``` + +**Voir Aussi** + +- [médian](#median) +- [les quantiles](#quantiles) + +## quantileTimingWeighted {#quantiletimingweighted} + +Avec la précision déterminée calcule le [quantile](https://en.wikipedia.org/wiki/Quantile) d'une séquence de données numériques en fonction du poids de chaque élément de séquence. + +Le résultat est déterministe (il ne dépend pas de l'ordre de traitement de la requête). La fonction est optimisée pour travailler avec des séquences qui décrivent des distributions comme les temps de chargement des pages web ou les temps de réponse du backend. + +Lorsque vous utilisez plusieurs `quantile*` fonctionne avec différents niveaux dans une requête, les états internes ne sont pas combinées (qui est, la requête fonctionne moins efficacement qu'il le pouvait). Dans ce cas, utilisez la [les quantiles](#quantiles) fonction. + +**Syntaxe** + +``` sql +quantileTimingWeighted(level)(expr, weight) +``` + +Alias: `medianTimingWeighted`. + +**Paramètre** + +- `level` — Level of quantile. Optional parameter. Constant floating-point number from 0 to 1. We recommend using a `level` la valeur dans la plage de `[0.01, 0.99]`. Valeur par défaut: 0.5. À `level=0.5` la fonction calcule [médian](https://en.wikipedia.org/wiki/Median). + +- `expr` — [Expression](../syntax.md#syntax-expressions) sur une colonne Valeurs renvoyant un [Flottant\*](../../data_types/float.md)numéro de type. + + - If negative values are passed to the function, the behavior is undefined. + - If the value is greater than 30,000 (a page loading time of more than 30 seconds), it is assumed to be 30,000. + +- `weight` — Column with weights of sequence elements. Weight is a number of value occurrences. + +**Exactitude** + +Le calcul est précis si: + +- Le nombre Total de valeurs ne dépasse pas 5670. +- Le nombre Total de valeurs dépasse 5670, mais le temps de chargement de la page est inférieur à 1024ms. + +Sinon, le résultat du calcul est arrondi au plus proche multiple de 16 ms. + +!!! note "Note" + Pour calculer les quantiles de temps de chargement de page, cette fonction est plus efficace et précise que [quantile](#quantile). + +**Valeur renvoyée** + +- Quantiles de niveau spécifié. + +Type: `Float32`. + +!!! note "Note" + Si aucune valeur n'est transmise à la fonction (lors de l'utilisation de `quantileTimingIf`), [Nan](../../data_types/float.md#data_type-float-nan-inf) est retourné. Le but est de différencier ces cas de cas qui aboutissent à zéro. Voir [Clause ORDER BY](../select.md#select-order-by) pour des notes sur le tri `NaN` valeur. + +**Exemple** + +Table d'entrée: + +``` text +┌─response_time─┬─weight─┐ +│ 68 │ 1 │ +│ 104 │ 2 │ +│ 112 │ 3 │ +│ 126 │ 2 │ +│ 138 │ 1 │ +│ 162 │ 1 │ +└───────────────┴────────┘ +``` + +Requête: + +``` sql +SELECT quantileTimingWeighted(response_time, weight) FROM t +``` + +Résultat: + +``` text +┌─quantileTimingWeighted(response_time, weight)─┐ +│ 112 │ +└───────────────────────────────────────────────┘ +``` + +**Voir Aussi** + +- [médian](#median) +- [les quantiles](#quantiles) + +## quantileTDigest {#quantiletdigest} + +Calcule une approximation [quantile](https://en.wikipedia.org/wiki/Quantile) d'une séquence de données numériques utilisant [t-digest](https://github.com/tdunning/t-digest/blob/master/docs/t-digest-paper/histo.pdf) algorithme. + +L'erreur maximale est de 1%. La consommation de mémoire est `log(n)`, où `n` est un certain nombre de valeurs. Le résultat dépend de l'ordre d'exécution de la requête et n'est pas déterministe. + +La performance de la fonction est inférieure à la performance de [quantile](#quantile) ou [quantileTiming](#quantiletiming). En termes de rapport entre la taille de L'état et la précision, cette fonction est bien meilleure que `quantile`. + +Lorsque vous utilisez plusieurs `quantile*` fonctionne avec différents niveaux dans une requête, les états internes ne sont pas combinées (qui est, la requête fonctionne moins efficacement qu'il le pouvait). Dans ce cas, utilisez la [les quantiles](#quantiles) fonction. + +**Syntaxe** + +``` sql +quantileTDigest(level)(expr) +``` + +Alias: `medianTDigest`. + +**Paramètre** + +- `level` — Level of quantile. Optional parameter. Constant floating-point number from 0 to 1. We recommend using a `level` la valeur dans la plage de `[0.01, 0.99]`. Valeur par défaut: 0.5. À `level=0.5` la fonction calcule [médian](https://en.wikipedia.org/wiki/Median). +- `expr` — Expression over the column values resulting in numeric [types de données](../../data_types/index.md#data_types), [Date](../../data_types/date.md) ou [DateTime](../../data_types/datetime.md). + +**Valeur renvoyée** + +- Approximative de quantiles de niveau spécifié. + +Type: + +- [Float64](../../data_types/float.md) pour l'entrée de type de données numériques. +- [Date](../../data_types/date.md) si les valeurs d'entrée ont le `Date` type. +- [DateTime](../../data_types/datetime.md) si les valeurs d'entrée ont le `DateTime` type. + +**Exemple** + +Requête: + +``` sql +SELECT quantileTDigest(number) FROM numbers(10) +``` + +Résultat: + +``` text +┌─quantileTDigest(number)─┐ +│ 4.5 │ +└─────────────────────────┘ +``` + +**Voir Aussi** + +- [médian](#median) +- [les quantiles](#quantiles) + +## quantileTDigestWeighted {#quantiletdigestweighted} + +Calcule une approximation [quantile](https://en.wikipedia.org/wiki/Quantile) d'une séquence de données numériques utilisant [t-digest](https://github.com/tdunning/t-digest/blob/master/docs/t-digest-paper/histo.pdf) algorithme. La fonction prend en compte le poids de chaque séquence de membre. L'erreur maximale est de 1%. La consommation de mémoire est `log(n)`, où `n` est un certain nombre de valeurs. + +La performance de la fonction est inférieure à la performance de [quantile](#quantile) ou [quantileTiming](#quantiletiming). En termes de rapport entre la taille de L'état et la précision, cette fonction est bien meilleure que `quantile`. + +Le résultat dépend de l'ordre d'exécution de la requête et n'est pas déterministe. + +Lorsque vous utilisez plusieurs `quantile*` fonctionne avec différents niveaux dans une requête, les états internes ne sont pas combinées (qui est, la requête fonctionne moins efficacement qu'il le pouvait). Dans ce cas, utilisez la [les quantiles](#quantiles) fonction. + +**Syntaxe** + +``` sql +quantileTDigest(level)(expr) +``` + +Alias: `medianTDigest`. + +**Paramètre** + +- `level` — Level of quantile. Optional parameter. Constant floating-point number from 0 to 1. We recommend using a `level` la valeur dans la plage de `[0.01, 0.99]`. Valeur par défaut: 0.5. À `level=0.5` la fonction calcule [médian](https://en.wikipedia.org/wiki/Median). +- `expr` — Expression over the column values resulting in numeric [types de données](../../data_types/index.md#data_types), [Date](../../data_types/date.md) ou [DateTime](../../data_types/datetime.md). +- `weight` — Column with weights of sequence elements. Weight is a number of value occurrences. + +**Valeur renvoyée** + +- Approximative de quantiles de niveau spécifié. + +Type: + +- [Float64](../../data_types/float.md) pour l'entrée de type de données numériques. +- [Date](../../data_types/date.md) si les valeurs d'entrée ont le `Date` type. +- [DateTime](../../data_types/datetime.md) si les valeurs d'entrée ont le `DateTime` type. + +**Exemple** + +Requête: + +``` sql +SELECT quantileTDigestWeighted(number, 1) FROM numbers(10) +``` + +Résultat: + +``` text +┌─quantileTDigestWeighted(number, 1)─┐ +│ 4.5 │ +└────────────────────────────────────┘ +``` + +**Voir Aussi** + +- [médian](#median) +- [les quantiles](#quantiles) + +## médian {#median} + +Le `median*` les fonctions sont les Alias pour le correspondant `quantile*` fonction. Ils calculent la médiane d'un échantillon de données numériques. + +Fonction: + +- `median` — Alias for [quantile](#quantile). +- `medianDeterministic` — Alias for [quantileDeterministic](#quantiledeterministic). +- `medianExact` — Alias for [quantileExact](#quantileexact). +- `medianExactWeighted` — Alias for [quantileExactWeighted](#quantileexactweighted). +- `medianTiming` — Alias for [quantileTiming](#quantiletiming). +- `medianTimingWeighted` — Alias for [quantileTimingWeighted](#quantiletimingweighted). +- `medianTDigest` — Alias for [quantileTDigest](#quantiletdigest). +- `medianTDigestWeighted` — Alias for [quantileTDigestWeighted](#quantiletdigestweighted). + +**Exemple** + +Table d'entrée: + +``` text +┌─val─┐ +│ 1 │ +│ 1 │ +│ 2 │ +│ 3 │ +└─────┘ +``` + +Requête: + +``` sql +SELECT medianDeterministic(val, 1) FROM t +``` + +Résultat: + +``` text +┌─medianDeterministic(val, 1)─┐ +│ 1.5 │ +└─────────────────────────────┘ +``` + +## quantiles(level1, level2, …)(x) {#quantiles} + +Toutes les fonctions quantiles ont également des fonctions quantiles correspondantes: `quantiles`, `quantilesDeterministic`, `quantilesTiming`, `quantilesTimingWeighted`, `quantilesExact`, `quantilesExactWeighted`, `quantilesTDigest`. Ces fonctions calculent tous les quantiles des niveaux listés en une seule passe et renvoient un tableau des valeurs résultantes. + +## varSamp (x) {#varsampx} + +Calcule le montant `Σ((x - x̅)^2) / (n - 1)`, où `n` est la taille de l'échantillon et `x̅`est la valeur moyenne de `x`. + +Il représente une estimation non biaisée de la variance d'une variable aléatoire si les valeurs passées forment son échantillon. + +Retourner `Float64`. Lorsque `n <= 1`, retourner `+∞`. + +## varPop (x) {#varpopx} + +Calcule le montant `Σ((x - x̅)^2) / n`, où `n` est la taille de l'échantillon et `x̅`est la valeur moyenne de `x`. + +En d'autres termes, dispersion pour un ensemble de valeurs. Retourner `Float64`. + +## stddevSamp (x) {#stddevsampx} + +Le résultat est égal à la racine carrée de `varSamp(x)`. + +## stddevPop (x) {#stddevpopx} + +Le résultat est égal à la racine carrée de `varPop(x)`. + +## topK (N) (x) {#topknx} + +Renvoie un tableau des valeurs approximativement les plus fréquentes dans la colonne spécifiée. Le tableau est trié par ordre décroissant de fréquence approximative des valeurs (et non par les valeurs elles-mêmes). + +Met en œuvre la [Gain De Place Filtré](http://www.l2f.inesc-id.pt/~fmmb/wiki/uploads/Work/misnis.ref0a.pdf) algorithme d'analyse de TopK, basé sur l'algorithme de réduction et de combinaison de [Économie D'Espace Parallèle](https://arxiv.org/pdf/1401.0702.pdf). + +``` sql +topK(N)(column) +``` + +Cette fonction ne fournit pas un résultat garanti. Dans certaines situations, des erreurs peuvent se produire et renvoyer des valeurs fréquentes qui ne sont pas les valeurs les plus fréquentes. + +Nous vous recommandons d'utiliser l' `N < 10` valeur; performance est réduite avec grand `N` valeur. Valeur maximale de `N = 65536`. + +**Paramètre** + +- ‘N’ est le nombre d'éléments de retour. + +Si le paramètre est omis, la valeur par défaut 10 est utilisé. + +**Argument** + +- ' x ' – The value to calculate frequency. + +**Exemple** + +Prendre la [OnTime](../../getting_started/example_datasets/ontime.md) ensemble de données et sélectionnez les trois valeurs les plus fréquentes `AirlineID` colonne. + +``` sql +SELECT topK(3)(AirlineID) AS res +FROM ontime +``` + +``` text +┌─res─────────────────┐ +│ [19393,19790,19805] │ +└─────────────────────┘ +``` + +## topKWeighted {#topkweighted} + +Semblable à `topK` mais prend un argument de type entier - `weight`. Chaque valeur est comptabilisée `weight` les temps de calcul de fréquence. + +**Syntaxe** + +``` sql +topKWeighted(N)(x, weight) +``` + +**Paramètre** + +- `N` — The number of elements to return. + +**Argument** + +- `x` – The value. +- `weight` — The weight. [UInt8](../../data_types/int_uint.md). + +**Valeur renvoyée** + +Renvoie un tableau des valeurs avec la somme approximative maximale des poids. + +**Exemple** + +Requête: + +``` sql +SELECT topKWeighted(10)(number, number) FROM numbers(1000) +``` + +Résultat: + +``` text +┌─topKWeighted(10)(number, number)──────────┐ +│ [999,998,997,996,995,994,993,992,991,990] │ +└───────────────────────────────────────────┘ +``` + +## covarSamp(x, y) {#covarsampx-y} + +Calcule la valeur de `Σ((x - x̅)(y - y̅)) / (n - 1)`. + +Renvoie Float64. Lorsque `n <= 1`, returns +∞. + +## covarPop (x, y) {#covarpopx-y} + +Calcule la valeur de `Σ((x - x̅)(y - y̅)) / n`. + +## corr (x, y) {#corrx-y} + +Calcule le coefficient de corrélation de Pearson: `Σ((x - x̅)(y - y̅)) / sqrt(Σ((x - x̅)^2) * Σ((y - y̅)^2))`. + +## categoricalInformationValue {#categoricalinformationvalue} + +Calcule la valeur de `(P(tag = 1) - P(tag = 0))(log(P(tag = 1)) - log(P(tag = 0)))` pour chaque catégorie. + +``` sql +categoricalInformationValue(category1, category2, ..., tag) +``` + +Le résultat indique comment une caractéristique discrète (catégorique) `[category1, category2, ...]` contribuer à un modèle d'apprentissage qui prédit la valeur de `tag`. + +## simplelineearregression {#simplelinearregression} + +Effectue une régression linéaire simple (unidimensionnelle). + +``` sql +simpleLinearRegression(x, y) +``` + +Paramètre: + +- `x` — Column with dependent variable values. +- `y` — Column with explanatory variable values. + +Valeurs renvoyées: + +Constant `(a, b)` de la ligne `y = a*x + b`. + +**Exemple** + +``` sql +SELECT arrayReduce('simpleLinearRegression', [0, 1, 2, 3], [0, 1, 2, 3]) +``` + +``` text +┌─arrayReduce('simpleLinearRegression', [0, 1, 2, 3], [0, 1, 2, 3])─┐ +│ (1,0) │ +└───────────────────────────────────────────────────────────────────┘ +``` + +``` sql +SELECT arrayReduce('simpleLinearRegression', [0, 1, 2, 3], [3, 4, 5, 6]) +``` + +``` text +┌─arrayReduce('simpleLinearRegression', [0, 1, 2, 3], [3, 4, 5, 6])─┐ +│ (1,3) │ +└───────────────────────────────────────────────────────────────────┘ +``` + +## stochasticLinearRegression {#agg_functions-stochasticlinearregression} + +Cette fonction implémente la régression linéaire stochastique. Il prend en charge les paramètres personnalisés pour le taux d'apprentissage, le coefficient de régularisation L2, la taille de mini-lot et a peu de méthodes pour mettre à jour les poids ([Adam](https://en.wikipedia.org/wiki/Stochastic_gradient_descent#Adam) (utilisé par défaut), [simple SGD](https://en.wikipedia.org/wiki/Stochastic_gradient_descent), [Élan](https://en.wikipedia.org/wiki/Stochastic_gradient_descent#Momentum), [Nesterov](https://mipt.ru/upload/medialibrary/d7e/41-91.pdf)). + +### Paramètre {#agg_functions-stochasticlinearregression-parameters} + +Il y a 4 paramètres personnalisables. Ils sont passés à la fonction séquentiellement, mais il n'est pas nécessaire de passer tous les quatre-les valeurs par défaut seront utilisées, mais un bon modèle nécessite un réglage des paramètres. + +``` text +stochasticLinearRegression(1.0, 1.0, 10, 'SGD') +``` + +1. `learning rate` est le coefficient sur la longueur de l'étape, lorsque l'étape de descente de gradient est effectuée. Un taux d'apprentissage trop élevé peut entraîner des poids infinis du modèle. Par défaut est `0.00001`. +2. `l2 regularization coefficient` ce qui peut aider à éviter le surajustement. Par défaut est `0.1`. +3. `mini-batch size` définit le nombre d'éléments, dont les gradients seront calculés et additionnés pour effectuer une étape de descente de gradient. La descente stochastique Pure utilise un élément, mais avoir de petits lots (environ 10 éléments) rend les étapes de gradient plus stables. Par défaut est `15`. +4. `method for updating weights` ils sont: `Adam` (par défaut), `SGD`, `Momentum`, `Nesterov`. `Momentum` et `Nesterov` nécessitent un peu plus de calculs et de mémoire, mais ils sont utiles en termes de vitesse de convergence et de stabilité des méthodes de gradient stochastique. + +### Utilisation {#agg_functions-stochasticlinearregression-usage} + +`stochasticLinearRegression` est utilisé en deux étapes: ajustement du modèle et prédiction sur de nouvelles données. Afin de correspondre le modèle et l'enregistrer son état pour utilisation ultérieure nous utilisons `-State` combinator, qui enregistre essentiellement l'état (poids du modèle, etc.). +Pour prédire nous utilisons la fonction [evalMLMethod](../functions/machine_learning_functions.md#machine_learning_methods-evalmlmethod) qui prend un état comme un argument ainsi que des fonctionnalités à prévoir sur. + + + +**1.** Raccord + +Une telle requête peut être utilisé. + +``` sql +CREATE TABLE IF NOT EXISTS train_data +( + param1 Float64, + param2 Float64, + target Float64 +) ENGINE = Memory; + +CREATE TABLE your_model ENGINE = Memory AS SELECT +stochasticLinearRegressionState(0.1, 0.0, 5, 'SGD')(target, param1, param2) +AS state FROM train_data; +``` + +Ici, nous devons également insérer des données dans `train_data` table. Le nombre de paramètres n'est pas fixe, il dépend uniquement du nombre d'arguments, passés dans `linearRegressionState`. Ils doivent tous être des valeurs numériques. +Notez que la colonne avec la valeur cible (que nous aimerions apprendre à prédire) est insérée comme premier argument. + +**2.** Prédire + +Après avoir enregistré un État dans la table, nous pouvons l'utiliser plusieurs fois pour la prédiction, ou même fusionner avec d'autres États et créer de nouveaux modèles encore meilleurs. + +``` sql +WITH (SELECT state FROM your_model) AS model SELECT +evalMLMethod(model, param1, param2) FROM test_data +``` + +La requête renvoie une colonne de valeurs prédites. Notez que le premier argument de `evalMLMethod` être `AggregateFunctionState` objet, sont ensuite des colonnes de fonctionnalités. + +`test_data` est un tableau comme `train_data` mais peut ne pas contenir de valeur cible. + +### Note {#agg_functions-stochasticlinearregression-notes} + +1. Pour fusionner deux modèles l'utilisateur peut créer une telle requête: + `sql SELECT state1 + state2 FROM your_models` + où `your_models` le tableau contient les deux modèles. Cette requête renvoie la nouvelle `AggregateFunctionState` objet. + +2. L'utilisateur peut récupérer les poids du modèle pour ses propres fins, sans enregistrer le modèle, si aucune `-State` combinator est utilisé. + `sql SELECT stochasticLinearRegression(0.01)(target, param1, param2) FROM train_data` + Une telle requête s'adaptera au Modèle et retournera ses poids-d'abord sont des poids, qui correspondent aux paramètres du modèle, le dernier est un biais. Ainsi, dans l'exemple ci-dessus, la requête renvoie une colonne avec 3 valeurs. + +**Voir Aussi** + +- [stochasticLogisticRegression](#agg_functions-stochasticlogisticregression) +- [Différence entre les régressions linéaires et logistiques](https://stackoverflow.com/questions/12146914/what-is-the-difference-between-linear-regression-and-logistic-regression) + +## stochasticLogisticRegression {#agg_functions-stochasticlogisticregression} + +Cette fonction implémente la régression logistique stochastique. Il peut être utilisé pour le problème de classification binaire, prend en charge les mêmes paramètres personnalisés que stochasticLinearRegression et fonctionne de la même manière. + +### Paramètre {#agg_functions-stochasticlogisticregression-parameters} + +Les paramètres sont exactement les mêmes que dans stochasticLinearRegression: +`learning rate`, `l2 regularization coefficient`, `mini-batch size`, `method for updating weights`. +Pour plus d'informations, voir [paramètre](#agg_functions-stochasticlinearregression-parameters). + +``` text +stochasticLogisticRegression(1.0, 1.0, 10, 'SGD') +``` + +1. Raccord + + + + See the `Fitting` section in the [stochasticLinearRegression](#stochasticlinearregression-usage-fitting) description. + + Predicted labels have to be in \[-1, 1\]. + +1. Prédire + + + + Using saved state we can predict probability of object having label `1`. + + ``` sql + WITH (SELECT state FROM your_model) AS model SELECT + evalMLMethod(model, param1, param2) FROM test_data + ``` + + The query will return a column of probabilities. Note that first argument of `evalMLMethod` is `AggregateFunctionState` object, next are columns of features. + + We can also set a bound of probability, which assigns elements to different labels. + + ``` sql + SELECT ans < 1.1 AND ans > 0.5 FROM + (WITH (SELECT state FROM your_model) AS model SELECT + evalMLMethod(model, param1, param2) AS ans FROM test_data) + ``` + + Then the result will be labels. + + `test_data` is a table like `train_data` but may not contain target value. + +**Voir Aussi** + +- [stochasticLinearRegression](#agg_functions-stochasticlinearregression) +- [Différence entre les régressions linéaires et logistiques.](https://stackoverflow.com/questions/12146914/what-is-the-difference-between-linear-regression-and-logistic-regression) + +## groupBitmapAnd {#groupbitmapand} + +Calculs le et d'une colonne bitmap, retour cardinalité de type UInt64, si Ajouter suffixe-État, puis retour [objet bitmap](../functions/bitmap_functions.md). + +``` sql +groupBitmapAnd(expr) +``` + +**Paramètre** + +`expr` – An expression that results in `AggregateFunction(groupBitmap, UInt*)` type. + +**Valeur de retour** + +La valeur de la `UInt64` type. + +**Exemple** + +``` sql +DROP TABLE IF EXISTS bitmap_column_expr_test2; +CREATE TABLE bitmap_column_expr_test2 +( + tag_id String, + z AggregateFunction(groupBitmap, UInt32) +) +ENGINE = MergeTree +ORDER BY tag_id; + +INSERT INTO bitmap_column_expr_test2 VALUES ('tag1', bitmapBuild(cast([1,2,3,4,5,6,7,8,9,10] as Array(UInt32)))); +INSERT INTO bitmap_column_expr_test2 VALUES ('tag2', bitmapBuild(cast([6,7,8,9,10,11,12,13,14,15] as Array(UInt32)))); +INSERT INTO bitmap_column_expr_test2 VALUES ('tag3', bitmapBuild(cast([2,4,6,8,10,12] as Array(UInt32)))); + +SELECT groupBitmapAnd(z) FROM bitmap_column_expr_test2 WHERE like(tag_id, 'tag%'); +┌─groupBitmapAnd(z)─┐ +│ 3 │ +└───────────────────┘ + +SELECT arraySort(bitmapToArray(groupBitmapAndState(z))) FROM bitmap_column_expr_test2 WHERE like(tag_id, 'tag%'); +┌─arraySort(bitmapToArray(groupBitmapAndState(z)))─┐ +│ [6,8,10] │ +└──────────────────────────────────────────────────┘ +``` + +## groupBitmapOr {#groupbitmapor} + +Calculs le ou d'une colonne bitmap, retour cardinalité de type UInt64, si Ajouter suffixe-État, puis retour [objet bitmap](../functions/bitmap_functions.md). C'est l'équivalent de `groupBitmapMerge`. + +``` sql +groupBitmapOr(expr) +``` + +**Paramètre** + +`expr` – An expression that results in `AggregateFunction(groupBitmap, UInt*)` type. + +**Valeur de retour** + +La valeur de la `UInt64` type. + +**Exemple** + +``` sql +DROP TABLE IF EXISTS bitmap_column_expr_test2; +CREATE TABLE bitmap_column_expr_test2 +( + tag_id String, + z AggregateFunction(groupBitmap, UInt32) +) +ENGINE = MergeTree +ORDER BY tag_id; + +INSERT INTO bitmap_column_expr_test2 VALUES ('tag1', bitmapBuild(cast([1,2,3,4,5,6,7,8,9,10] as Array(UInt32)))); +INSERT INTO bitmap_column_expr_test2 VALUES ('tag2', bitmapBuild(cast([6,7,8,9,10,11,12,13,14,15] as Array(UInt32)))); +INSERT INTO bitmap_column_expr_test2 VALUES ('tag3', bitmapBuild(cast([2,4,6,8,10,12] as Array(UInt32)))); + +SELECT groupBitmapOr(z) FROM bitmap_column_expr_test2 WHERE like(tag_id, 'tag%'); +┌─groupBitmapOr(z)─┐ +│ 15 │ +└──────────────────┘ + +SELECT arraySort(bitmapToArray(groupBitmapOrState(z))) FROM bitmap_column_expr_test2 WHERE like(tag_id, 'tag%'); +┌─arraySort(bitmapToArray(groupBitmapOrState(z)))─┐ +│ [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] │ +└─────────────────────────────────────────────────┘ +``` + +## groupBitmapXor {#groupbitmapxor} + +Calculs le XOR d'une colonne bitmap, retour cardinalité de type UInt64, si Ajouter suffixe-État, puis retour [objet bitmap](../functions/bitmap_functions.md). + +``` sql +groupBitmapOr(expr) +``` + +**Paramètre** + +`expr` – An expression that results in `AggregateFunction(groupBitmap, UInt*)` type. + +**Valeur de retour** + +La valeur de la `UInt64` type. + +**Exemple** + +``` sql +DROP TABLE IF EXISTS bitmap_column_expr_test2; +CREATE TABLE bitmap_column_expr_test2 +( + tag_id String, + z AggregateFunction(groupBitmap, UInt32) +) +ENGINE = MergeTree +ORDER BY tag_id; + +INSERT INTO bitmap_column_expr_test2 VALUES ('tag1', bitmapBuild(cast([1,2,3,4,5,6,7,8,9,10] as Array(UInt32)))); +INSERT INTO bitmap_column_expr_test2 VALUES ('tag2', bitmapBuild(cast([6,7,8,9,10,11,12,13,14,15] as Array(UInt32)))); +INSERT INTO bitmap_column_expr_test2 VALUES ('tag3', bitmapBuild(cast([2,4,6,8,10,12] as Array(UInt32)))); + +SELECT groupBitmapXor(z) FROM bitmap_column_expr_test2 WHERE like(tag_id, 'tag%'); +┌─groupBitmapXor(z)─┐ +│ 10 │ +└───────────────────┘ + +SELECT arraySort(bitmapToArray(groupBitmapXorState(z))) FROM bitmap_column_expr_test2 WHERE like(tag_id, 'tag%'); +┌─arraySort(bitmapToArray(groupBitmapXorState(z)))─┐ +│ [1,3,5,6,8,10,11,13,14,15] │ +└──────────────────────────────────────────────────┘ +``` + +[Article Original](https://clickhouse.tech/docs/en/query_language/agg_functions/reference/) diff --git a/docs/fr/query_language/alter.md b/docs/fr/query_language/alter.md new file mode 100644 index 00000000000..13c57c0ec0c --- /dev/null +++ b/docs/fr/query_language/alter.md @@ -0,0 +1,502 @@ +--- +machine_translated: true +--- + +## ALTER {#query_language_queries_alter} + +Le `ALTER` la requête est prise en charge uniquement pour `*MergeTree` des tables, ainsi que `Merge`et`Distributed`. La requête a plusieurs variantes. + +### Manipulations De Colonne {#column-manipulations} + +Modification de la structure de la table. + +``` sql +ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|CLEAR|COMMENT|MODIFY COLUMN ... +``` + +Dans la requête, spécifiez une liste d'une ou plusieurs actions séparées par des virgules. +Chaque action est une opération sur une colonne. + +Les actions suivantes sont prises en charge: + +- [ADD COLUMN](#alter_add-column) — Adds a new column to the table. +- [DROP COLUMN](#alter_drop-column) — Deletes the column. +- [CLEAR COLUMN](#alter_clear-column) — Resets column values. +- [COMMENT COLUMN](#alter_comment-column) — Adds a text comment to the column. +- [MODIFY COLUMN](#alter_modify-column) — Changes column's type, default expression and TTL. + +Ces actions sont décrites en détail ci-dessous. + +#### ADD COLUMN {#alter_add-column} + +``` sql +ADD COLUMN [IF NOT EXISTS] name [type] [default_expr] [codec] [AFTER name_after] +``` + +Ajoute une nouvelle colonne à la table spécifiée `name`, `type`, [`codec`](create.md#codecs) et `default_expr` (voir la section [Expressions par défaut](create.md#create-default-values)). + +Si l' `IF NOT EXISTS` la clause est incluse, la requête ne retournera pas d'erreur si la colonne existe déjà. Si vous spécifiez `AFTER name_after` (le nom d'une autre colonne), la colonne est ajoutée après celle spécifiée dans la liste des colonnes de la table. Sinon, la colonne est ajoutée à la fin de la table. Notez qu'il n'existe aucun moyen d'ajouter une colonne au début d'un tableau. Pour une chaîne d'actions, `name_after` peut être le nom d'une colonne est ajoutée dans l'une des actions précédentes. + +L'ajout d'une colonne modifie simplement la structure de la table, sans effectuer d'actions avec des données. Les données n'apparaissent pas sur le disque après la `ALTER`. Si les données sont manquantes pour une colonne lors de la lecture de la table, elles sont remplies avec des valeurs par défaut (en exécutant l'expression par défaut s'il y en a une, ou en utilisant des zéros ou des chaînes vides). La colonne apparaît sur le disque après la fusion des parties de données (voir [MergeTree](../operations/table_engines/mergetree.md)). + +Cette approche nous permet de compléter le `ALTER` requête instantanément, sans augmenter le volume de données anciennes. + +Exemple: + +``` sql +ALTER TABLE visits ADD COLUMN browser String AFTER user_id +``` + +#### DROP COLUMN {#alter_drop-column} + +``` sql +DROP COLUMN [IF EXISTS] name +``` + +Supprime la colonne avec le nom `name`. Si l' `IF EXISTS` la clause est spécifiée, la requête ne retournera pas d'erreur si la colonne n'existe pas. + +Supprime les données du système de fichiers. Comme cela supprime des fichiers entiers, la requête est terminée presque instantanément. + +Exemple: + +``` sql +ALTER TABLE visits DROP COLUMN browser +``` + +#### CLEAR COLUMN {#alter_clear-column} + +``` sql +CLEAR COLUMN [IF EXISTS] name IN PARTITION partition_name +``` + +Réinitialise toutes les données dans une colonne pour une partition spécifiée. En savoir plus sur la définition du nom de la partition dans la section [Comment spécifier l'expression de partition](#alter-how-to-specify-part-expr). + +Si l' `IF EXISTS` la clause est spécifiée, la requête ne retournera pas d'erreur si la colonne n'existe pas. + +Exemple: + +``` sql +ALTER TABLE visits CLEAR COLUMN browser IN PARTITION tuple() +``` + +#### COMMENT COLUMN {#alter_comment-column} + +``` sql +COMMENT COLUMN [IF EXISTS] name 'comment' +``` + +Ajoute un commentaire à la colonne. Si l' `IF EXISTS` la clause est spécifiée, la requête ne retournera pas d'erreur si la colonne n'existe pas. + +Chaque colonne peut avoir un commentaire. Si un commentaire existe déjà pour la colonne, un nouveau commentaire remplace le précédent commentaire. + +Les commentaires sont stockés dans le `comment_expression` colonne renvoyée par le [DESCRIBE TABLE](misc.md#misc-describe-table) requête. + +Exemple: + +``` sql +ALTER TABLE visits COMMENT COLUMN browser 'The table shows the browser used for accessing the site.' +``` + +#### MODIFY COLUMN {#alter_modify-column} + +``` sql +MODIFY COLUMN [IF EXISTS] name [type] [default_expr] [TTL] +``` + +Cette requête modifie le `name` les propriétés de la colonne: + +- Type + +- Expression par défaut + +- TTL + + For examples of columns TTL modifying, see [Column TTL](../operations/table_engines/mergetree.md#mergetree-column-ttl). + +Si l' `IF EXISTS` la clause est spécifiée, la requête ne retournera pas d'erreur si la colonne n'existe pas. + +Lors de la modification du type, les valeurs sont converties comme si [toType](functions/type_conversion_functions.md) les fonctions ont été appliquées. Si seule l'expression par défaut est modifiée, la requête ne fait rien de complexe et est terminée presque instantanément. + +Exemple: + +``` sql +ALTER TABLE visits MODIFY COLUMN browser Array(String) +``` + +Changing the column type is the only complex action – it changes the contents of files with data. For large tables, this may take a long time. + +Il y a plusieurs étapes de traitement: + +- Préparation de (nouveaux) fichiers temporaires avec des données modifiées. +- Renommer les anciens fichiers. +- Renommer les (nouveaux) fichiers temporaires en anciens noms. +- Suppression des anciens fichiers. + +Seule la première étape prend du temps. Si il y a un échec à ce stade, les données ne sont pas modifiées. +En cas d'échec au cours d'une des étapes successives, les données peuvent être restaurées manuellement. L'exception est si les anciens fichiers ont été supprimés du système de fichiers mais que les données des nouveaux fichiers n'ont pas été écrites sur le disque et ont été perdues. + +Le `ALTER` la requête de modification des colonnes est répliquée. Les instructions sont enregistrées dans ZooKeeper, puis chaque réplique les applique. Tout `ALTER` les requêtes sont exécutées dans le même ordre. La requête attend que les actions appropriées soient terminées sur les autres répliques. Cependant, une requête pour modifier des colonnes dans une table répliquée peut être interrompue, et toutes les actions seront effectuées de manière asynchrone. + +#### Modifier les limites de la requête {#alter-query-limitations} + +Le `ALTER` query vous permet de créer et de supprimer des éléments distincts (colonnes) dans des structures de données imbriquées, mais pas des structures de données imbriquées entières. Pour ajouter une structure de données imbriquée, vous pouvez ajouter des colonnes avec un nom comme `name.nested_name` et le type `Array(T)`. Une structure de données imbriquée est équivalente à plusieurs colonnes de tableau avec un nom qui a le même préfixe avant le point. + +Il n'y a pas de support pour supprimer des colonnes dans la clé primaire ou la clé d'échantillonnage (colonnes qui sont utilisées dans le `ENGINE` expression). La modification du type des colonnes incluses dans la clé primaire n'est possible que si cette modification n'entraîne pas la modification des données (par exemple, vous êtes autorisé à ajouter des valeurs à une énumération ou à modifier un type de `DateTime` de `UInt32`). + +Si l' `ALTER` la requête n'est pas suffisante pour apporter les modifications de table dont vous avez besoin, vous pouvez créer une nouvelle table, y copier les données en utilisant le [INSERT SELECT](insert_into.md#insert_query_insert-select) requête, puis changer les tables en utilisant le [RENAME](misc.md#misc_operations-rename) requête et supprimer l'ancienne table. Vous pouvez utiliser l' [clickhouse-copieur](../operations/utils/clickhouse-copier.md) comme une alternative à la `INSERT SELECT` requête. + +Le `ALTER` query bloque toutes les lectures et écritures pour la table. En d'autres termes, si une longue `SELECT` est en cours d'exécution au moment de la `ALTER` requête, la `ALTER` la requête va attendre qu'elle se termine. Dans le même temps, toutes les nouvelles requêtes à la même table attendre que ce `ALTER` est en cours d'exécution. + +Pour les tables qui ne stockent pas les données elles-mêmes (telles que `Merge` et `Distributed`), `ALTER` change simplement la structure de la table, et ne change pas la structure des tables subordonnées. Par exemple, lors de L'exécution de ALTER pour un `Distributed` table, vous devrez également exécuter `ALTER` pour les tables sur tous les serveurs distants. + +### Manipulations Avec Des Expressions Clés {#manipulations-with-key-expressions} + +La commande suivante est prise en charge: + +``` sql +MODIFY ORDER BY new_expression +``` + +Cela ne fonctionne que pour les tables du [`MergeTree`](../operations/table_engines/mergetree.md) de la famille (y compris les +[répliqué](../operations/table_engines/replication.md) table). La commande change l' +[clé de tri](../operations/table_engines/mergetree.md) de la table +de `new_expression` (une expression ou un tuple d'expressions). Clé primaire reste le même. + +La commande est légère en ce sens qu'elle ne modifie que les métadonnées. Pour conserver la propriété cette partie de données +les lignes sont ordonnées par l'expression de clé de tri vous ne pouvez pas ajouter d'expressions contenant des colonnes existantes +à la clé de tri (seules les colonnes ajoutées par `ADD COLUMN` commande dans le même `ALTER` requête). + +### Manipulations Avec Des Indices De Saut De Données {#manipulations-with-data-skipping-indices} + +Cela ne fonctionne que pour les tables du [`*MergeTree`](../operations/table_engines/mergetree.md) de la famille (y compris les +[répliqué](../operations/table_engines/replication.md) table). Les opérations suivantes +sont disponibles: + +- `ALTER TABLE [db].name ADD INDEX name expression TYPE type GRANULARITY value AFTER name [AFTER name2]` - Ajoute la description de l'index aux métadonnées des tables. + +- `ALTER TABLE [db].name DROP INDEX name` - Supprime la description de l'index des métadonnées des tables et supprime les fichiers d'index du disque. + +Ces commandes sont légères dans le sens où elles ne modifient que les métadonnées ou suppriment des fichiers. +En outre, ils sont répliqués (synchronisation des métadonnées des indices via ZooKeeper). + +### Manipulations avec contraintes {#manipulations-with-constraints} + +En voir plus sur [contraintes](create.md#constraints) + +Les contraintes peuvent être ajoutées ou supprimées à l'aide de la syntaxe suivante: + +``` sql +ALTER TABLE [db].name ADD CONSTRAINT constraint_name CHECK expression; +ALTER TABLE [db].name DROP CONSTRAINT constraint_name; +``` + +Les requêtes ajouteront ou supprimeront des métadonnées sur les contraintes de la table afin qu'elles soient traitées immédiatement. + +Contrainte de vérifier *ne sera pas exécuté* sur les données existantes si elle a été ajoutée. + +Toutes les modifications sur les tables répliquées sont diffusées sur ZooKeeper et seront donc appliquées sur d'autres répliques. + +### Manipulations avec des Partitions et des pièces {#alter_manipulations-with-partitions} + +Les opérations suivantes avec [partition](../operations/table_engines/custom_partitioning_key.md) sont disponibles: + +- [DETACH PARTITION](#alter_detach-partition) – Moves a partition to the `detached` répertoire et de l'oublier. +- [DROP PARTITION](#alter_drop-partition) – Deletes a partition. +- [ATTACH PART\|PARTITION](#alter_attach-partition) – Adds a part or partition from the `detached` répertoire à la table. +- [REPLACE PARTITION](#alter_replace-partition) - Copie la partition de données d'une table à l'autre. +- [ATTACH PARTITION FROM](#alter_attach-partition-from) – Copies the data partition from one table to another and adds. +- [REPLACE PARTITION](#alter_replace-partition) - Copie la partition de données d'une table à l'autre et la remplace. +- [MOVE PARTITION TO TABLE](#alter_move_to_table-partition) (\#alter\_move\_to\_table-partition) - déplace la partition de données d'une table à l'autre. +- [CLEAR COLUMN IN PARTITION](#alter_clear-column-partition) - Rétablit la valeur d'une colonne spécifiée dans une partition. +- [CLEAR INDEX IN PARTITION](#alter_clear-index-partition) - Réinitialise l'index secondaire spécifié dans une partition. +- [FREEZE PARTITION](#alter_freeze-partition) – Creates a backup of a partition. +- [FETCH PARTITION](#alter_fetch-partition) – Downloads a partition from another server. +- [MOVE PARTITION\|PART](#alter_move-partition) – Move partition/data part to another disk or volume. + + + +#### Détacher la PARTITION {\#alter\_detach-partition} {#detach-partition-alter-detach-partition} + +``` sql +ALTER TABLE table_name DETACH PARTITION partition_expr +``` + +Déplace toutes les données de la partition spécifiée vers `detached` répertoire. Le serveur oublie la partition de données détachée comme si elle n'existait pas. Le serveur ne connaîtra pas ces données tant que vous n'aurez pas [ATTACH](#alter_attach-partition) requête. + +Exemple: + +``` sql +ALTER TABLE visits DETACH PARTITION 201901 +``` + +Lisez à propos de la définition de l'expression de partition dans une section [Comment spécifier l'expression de partition](#alter-how-to-specify-part-expr). + +Une fois la requête exécutée, vous pouvez faire ce que vous voulez avec les données du `detached` directory — delete it from the file system, or just leave it. + +This query is replicated – it moves the data to the `detached` répertoire sur toutes les répliques. Notez que vous ne pouvez exécuter cette requête que sur un réplica leader. Pour savoir si une réplique est un leader, effectuez le `SELECT` requête à l' [système.réplique](../operations/system_tables.md#system_tables-replicas) table. Alternativement, il est plus facile de faire une `DETACH` requête sur toutes les répliques - toutes les répliques lancent une exception, à l'exception de la réplique leader. + +#### DROP PARTITION {#alter_drop-partition} + +``` sql +ALTER TABLE table_name DROP PARTITION partition_expr +``` + +Supprime la partition spécifiée de la table. Cette requête marque la partition comme inactive et supprime complètement les données, environ en 10 minutes. + +Lisez à propos de la définition de l'expression de partition dans une section [Comment spécifier l'expression de partition](#alter-how-to-specify-part-expr). + +The query is replicated – it deletes data on all replicas. + +#### DROP DETACHED PARTITION\|PART {#alter_drop-detached} + +``` sql +ALTER TABLE table_name DROP DETACHED PARTITION|PART partition_expr +``` + +Supprime la partie spécifiée ou toutes les parties de la partition spécifiée de `detached`. +En savoir plus sur la définition de l'expression de partition dans une section [Comment spécifier l'expression de partition](#alter-how-to-specify-part-expr). + +#### ATTACH PARTITION\|PART {#alter_attach-partition} + +``` sql +ALTER TABLE table_name ATTACH PARTITION|PART partition_expr +``` + +Ajoute des données à la table à partir du `detached` répertoire. Il est possible d'ajouter des données dans une partition entière ou pour une partie distincte. Exemple: + +``` sql +ALTER TABLE visits ATTACH PARTITION 201901; +ALTER TABLE visits ATTACH PART 201901_2_2_0; +``` + +En savoir plus sur la définition de l'expression de partition dans une section [Comment spécifier l'expression de partition](#alter-how-to-specify-part-expr). + +Cette requête est répliquée. L'initiateur de réplica vérifie s'il y a des données dans le `detached` répertoire. Si des données existent, la requête vérifie son intégrité. Si tout est correct, la requête ajoute les données à la table. Tous les autres réplicas téléchargent les données de l'initiateur de réplica. + +Ainsi, vous pouvez mettre des données à la `detached` répertoire sur une réplique, et utilisez le `ALTER ... ATTACH` requête pour l'ajouter à la table sur tous les réplicas. + +#### ATTACH PARTITION FROM {#alter_attach-partition-from} + +``` sql +ALTER TABLE table2 ATTACH PARTITION partition_expr FROM table1 +``` + +Cette requête copie la partition de données du `table1` de `table2` ajoute des données de gratuit dans la `table2`. Notez que les données ne seront pas supprimées de `table1`. + +Pour que la requête s'exécute correctement, les conditions suivantes doivent être remplies: + +- Les deux tables doivent avoir la même structure. +- Les deux tables doivent avoir la même clé de partition. + +#### REPLACE PARTITION {#alter_replace-partition} + +``` sql +ALTER TABLE table2 REPLACE PARTITION partition_expr FROM table1 +``` + +Cette requête copie la partition de données du `table1` de `table2` et remplace la partition existante dans le `table2`. Notez que les données ne seront pas supprimées de `table1`. + +Pour que la requête s'exécute correctement, les conditions suivantes doivent être remplies: + +- Les deux tables doivent avoir la même structure. +- Les deux tables doivent avoir la même clé de partition. + +#### MOVE PARTITION TO TABLE {#alter_move_to_table-partition} + +``` sql +ALTER TABLE table_source MOVE PARTITION partition_expr TO TABLE table_dest +``` + +Cette requête déplace la partition de données du `table_source` de `table_dest` avec la suppression des données de `table_source`. + +Pour que la requête s'exécute correctement, les conditions suivantes doivent être remplies: + +- Les deux tables doivent avoir la même structure. +- Les deux tables doivent avoir la même clé de partition. +- Les deux tables doivent appartenir à la même famille de moteurs. (répliqué ou non répliqué) +- Les deux tables doivent avoir la même stratégie de stockage. + +#### CLEAR COLUMN IN PARTITION {#alter_clear-column-partition} + +``` sql +ALTER TABLE table_name CLEAR COLUMN column_name IN PARTITION partition_expr +``` + +Réinitialise toutes les valeurs de la colonne spécifiée dans une partition. Si l' `DEFAULT` la clause a été déterminée lors de la création d'une table, cette requête définit la valeur de la colonne à une valeur par défaut spécifiée. + +Exemple: + +``` sql +ALTER TABLE visits CLEAR COLUMN hour in PARTITION 201902 +``` + +#### FREEZE PARTITION {#alter_freeze-partition} + +``` sql +ALTER TABLE table_name FREEZE [PARTITION partition_expr] +``` + +Cette requête crée une sauvegarde locale d'une partition spécifiée. Si l' `PARTITION` la clause est omise, la requête crée la sauvegarde de toutes les partitions à la fois. + +!!! note "Note" + L'ensemble du processus de sauvegarde est effectuée sans arrêter le serveur. + +Notez que pour les tables de style ancien, vous pouvez spécifier le préfixe du nom de la partition (par exemple, ‘2019’)- ensuite, la requête crée la sauvegarde pour toutes les partitions correspondantes. Lisez à propos de la définition de l'expression de partition dans une section [Comment spécifier l'expression de partition](#alter-how-to-specify-part-expr). + +Au moment de l'exécution, pour un instantané de données, la requête crée des liens rigides vers des données de table. Les liens sont placés dans le répertoire `/var/lib/clickhouse/shadow/N/...`, où: + +- `/var/lib/clickhouse/` est le répertoire de travail clickhouse spécifié dans la configuration. +- `N` est le numéro incrémental de la sauvegarde. + +!!! note "Note" + Si vous utilisez [un ensemble de disques pour le stockage des données dans une table](../operations/table_engines/mergetree.md#table_engine-mergetree-multiple-volumes), le `shadow/N` le répertoire apparaît sur chaque disque, stockant les parties de données correspondant `PARTITION` expression. + +La même structure de répertoires est créée à l'intérieur de la sauvegarde qu'à l'intérieur `/var/lib/clickhouse/`. La requête effectue ‘chmod’ pour tous les fichiers, interdisant d'écrire en eux. + +Après avoir créé la sauvegarde, vous pouvez copier les données depuis `/var/lib/clickhouse/shadow/` sur le serveur distant, puis supprimez-le du serveur local. Notez que l' `ALTER t FREEZE PARTITION` la requête n'est pas répliqué. Il crée une sauvegarde locale uniquement sur le serveur local. + +La requête crée une sauvegarde presque instantanément (mais elle attend d'abord que les requêtes en cours à la table correspondante se terminent). + +`ALTER TABLE t FREEZE PARTITION` copie uniquement les données, pas les métadonnées de la table. Faire une sauvegarde des métadonnées de la table, copiez le fichier `/var/lib/clickhouse/metadata/database/table.sql` + +Pour restaurer des données à partir d'une sauvegarde, procédez comme suit: + +1. Créer la table si elle n'existe pas. Pour afficher la requête, utilisez la .fichier sql (remplacer `ATTACH` avec `CREATE`). +2. Copier les données de la `data/database/table/` répertoire à l'intérieur de la sauvegarde `/var/lib/clickhouse/data/database/table/detached/` répertoire. +3. Exécuter `ALTER TABLE t ATTACH PARTITION` les requêtes pour ajouter les données à une table. + +La restauration à partir d'une sauvegarde ne nécessite pas l'arrêt du serveur. + +Pour plus d'informations sur les sauvegardes et la restauration [La Sauvegarde Des Données](../operations/backup.md) section. + +#### CLEAR INDEX IN PARTITION {#alter_clear-index-partition} + +``` sql +ALTER TABLE table_name CLEAR INDEX index_name IN PARTITION partition_expr +``` + +La requête fonctionne de manière similaire à `CLEAR COLUMN` mais il remet un index au lieu d'une colonne de données. + +#### FETCH PARTITION {#alter_fetch-partition} + +``` sql +ALTER TABLE table_name FETCH PARTITION partition_expr FROM 'path-in-zookeeper' +``` + +Télécharge une partition depuis un autre serveur. Cette requête ne fonctionne que pour les tables répliquées. + +La requête effectue les opérations suivantes: + +1. Télécharge la partition à partir du fragment spécifié. Dans ‘path-in-zookeeper’ vous devez spécifier un chemin vers le fragment dans ZooKeeper. +2. Ensuite, la requête met les données téléchargées dans le `detached` répertoire de la `table_name` table. L'utilisation de la [ATTACH PARTITION\|PART](#alter_attach-partition) requête pour ajouter les données à la table. + +Exemple: + +``` sql +ALTER TABLE users FETCH PARTITION 201902 FROM '/clickhouse/tables/01-01/visits'; +ALTER TABLE users ATTACH PARTITION 201902; +``` + +Notez que: + +- Le `ALTER ... FETCH PARTITION` la requête n'est pas répliqué. Il place la partition à la `detached` répertoire sur le serveur local. +- Le `ALTER TABLE ... ATTACH` la requête est répliquée. Il ajoute les données à toutes les répliques. Les données sont ajoutées à l'une des répliques `detached` répertoire, et aux autres-des répliques voisines. + +Avant le téléchargement, le système vérifie si la partition existe et si la structure de la table correspond. La réplique la plus appropriée est sélectionnée automatiquement parmi les répliques saines. + +Bien que la requête soit appelée `ALTER TABLE`, il ne modifie pas la structure de la table et ne modifie pas immédiatement les données disponibles dans la table. + +#### MOVE PARTITION\|PART {#alter_move-partition} + +Déplace des partitions ou des parties de données vers un autre volume ou disque pour `MergeTree`-tables de moteur. Voir [Utilisation de plusieurs périphériques de bloc pour le stockage de données](../operations/table_engines/mergetree.md#table_engine-mergetree-multiple-volumes). + +``` sql +ALTER TABLE table_name MOVE PARTITION|PART partition_expr TO DISK|VOLUME 'disk_name' +``` + +Le `ALTER TABLE t MOVE` requête: + +- Non répliqué, car différentes répliques peuvent avoir des stratégies de stockage différentes. +- Renvoie une erreur si le disque ou le volume n'est pas configuré. Query renvoie également une erreur si les conditions de déplacement des données, spécifiées dans la stratégie de stockage, ne peuvent pas être appliquées. +- Peut renvoyer une erreur dans le cas, lorsque les données à déplacer sont déjà déplacées par un processus en arrière-plan, simultané `ALTER TABLE t MOVE` requête ou à la suite de la fusion de données d'arrière-plan. Un utilisateur ne doit effectuer aucune action supplémentaire dans ce cas. + +Exemple: + +``` sql +ALTER TABLE hits MOVE PART '20190301_14343_16206_438' TO VOLUME 'slow' +ALTER TABLE hits MOVE PARTITION '2019-09-01' TO DISK 'fast_ssd' +``` + +#### Comment Définir L'Expression De La Partition {#alter-how-to-specify-part-expr} + +Vous pouvez spécifier l'expression de partition dans `ALTER ... PARTITION` requêtes de différentes manières: + +- Comme une valeur de l' `partition` la colonne de la `system.parts` table. Exemple, `ALTER TABLE visits DETACH PARTITION 201901`. +- Comme expression de la colonne de la table. Les constantes et les expressions constantes sont prises en charge. Exemple, `ALTER TABLE visits DETACH PARTITION toYYYYMM(toDate('2019-01-25'))`. +- À l'aide de l'ID de partition. Partition ID est un identifiant de chaîne de la partition (lisible par l'homme, si possible) qui est utilisé comme noms de partitions dans le système de fichiers et dans ZooKeeper. L'ID de partition doit être spécifié dans `PARTITION ID` clause, entre guillemets simples. Exemple, `ALTER TABLE visits DETACH PARTITION ID '201901'`. +- Dans le [ALTER ATTACH PART](#alter_attach-partition) et [DROP DETACHED PART](#alter_drop-detached) requête, pour spécifier le nom d'une partie, utilisez le littéral de chaîne avec une valeur de `name` la colonne de la [système.detached\_parts](../operations/system_tables.md#system_tables-detached_parts) table. Exemple, `ALTER TABLE visits ATTACH PART '201901_1_1_0'`. + +L'utilisation de guillemets lors de la spécification de la partition dépend du type d'expression de partition. Par exemple, pour la `String` type, vous devez spécifier son nom entre guillemets (`'`). Pour l' `Date` et `Int*` types aucune citation n'est nécessaire. + +Pour les tables de style ancien, vous pouvez spécifier la partition sous forme de nombre `201901` ou une chaîne de caractères `'201901'`. La syntaxe des tables new-style est plus stricte avec les types (similaire à l'analyseur pour le format D'entrée des valeurs). + +Toutes les règles ci-dessus sont aussi valables pour la [OPTIMIZE](misc.md#misc_operations-optimize) requête. Si vous devez spécifier la seule partition lors de l'optimisation d'une table non partitionnée, définissez l'expression `PARTITION tuple()`. Exemple: + +``` sql +OPTIMIZE TABLE table_not_partitioned PARTITION tuple() FINAL; +``` + +Les exemples de `ALTER ... PARTITION` les requêtes sont démontrées dans les tests [`00502_custom_partitioning_local`](https://github.com/ClickHouse/ClickHouse/blob/master/dbms/tests/queries/0_stateless/00502_custom_partitioning_local.sql) et [`00502_custom_partitioning_replicated_zookeeper`](https://github.com/ClickHouse/ClickHouse/blob/master/dbms/tests/queries/0_stateless/00502_custom_partitioning_replicated_zookeeper.sql). + +### Manipulations avec Table TTL {#manipulations-with-table-ttl} + +Vous pouvez modifier [tableau TTL](../operations/table_engines/mergetree.md#mergetree-table-ttl) avec une demande du formulaire suivant: + +``` sql +ALTER TABLE table-name MODIFY TTL ttl-expression +``` + +### Synchronicité des requêtes ALTER {#synchronicity-of-alter-queries} + +Pour les tables non réplicables, tous `ALTER` les requêtes sont exécutées simultanément. Pour les tables réplicables, la requête ajoute simplement des instructions pour les actions appropriées à `ZooKeeper` et les actions elles-mêmes sont effectuées dès que possible. Cependant, la requête peut attendre que ces actions soient terminées sur tous les réplicas. + +Pour `ALTER ... ATTACH|DETACH|DROP` les requêtes, vous pouvez utiliser le `replication_alter_partitions_sync` configuration pour configurer l'attente. +Valeurs possibles: `0` – do not wait; `1` – only wait for own execution (default); `2` – wait for all. + +### Mutation {#alter-mutations} + +Les Mutations sont une variante ALTER query qui permet de modifier ou de supprimer des lignes dans une table. Contrairement à la norme `UPDATE` et `DELETE` les requêtes qui sont destinées aux changements de données de point, les mutations sont destinées aux opérations lourdes qui modifient beaucoup de lignes dans une table. Pris en charge pour le `MergeTree` famille de moteurs de table, y compris les moteurs avec support de réplication. + +Les tables existantes sont prêtes pour les mutations telles quelles (aucune conversion nécessaire), mais après l'application de la première mutation à une table, son format de métadonnées devient incompatible avec les versions précédentes du serveur et il devient impossible de revenir à une version précédente. + +Commandes actuellement disponibles: + +``` sql +ALTER TABLE [db.]table DELETE WHERE filter_expr +``` + +Le `filter_expr` doit être de type `UInt8`. La requête supprime les lignes de la table pour lesquelles cette expression prend une valeur différente de zéro. + +``` sql +ALTER TABLE [db.]table UPDATE column1 = expr1 [, ...] WHERE filter_expr +``` + +Le `filter_expr` doit être de type `UInt8`. Cette requête met à jour les valeurs des colonnes spécifiées en les valeurs des expressions correspondantes dans les lignes pour lesquelles `filter_expr` prend une valeur non nulle. Les valeurs sont converties en type de colonne à l'aide `CAST` opérateur. La mise à jour des colonnes utilisées dans le calcul de la clé primaire ou de la clé de partition n'est pas prise en charge. + +``` sql +ALTER TABLE [db.]table MATERIALIZE INDEX name IN PARTITION partition_name +``` + +La requête reconstruit l'index secondaire `name` dans la partition `partition_name`. + +Une requête peut contenir plusieurs commandes séparées par des virgules. + +Pour les tables \* MergeTree, les mutations s'exécutent en réécrivant des parties de données entières. Il n'y a pas d'atomicité-les pièces sont substituées aux pièces mutées dès qu'elles sont prêtes et un `SELECT` la requête qui a commencé à s'exécuter pendant une mutation verra les données des parties qui ont déjà été mutées ainsi que les données des parties qui n'ont pas encore été mutées. + +Les Mutations sont totalement ordonnées par leur ordre de création et sont appliquées à chaque partie dans cet ordre. Les Mutations sont également partiellement ordonnées avec des insertions - les données insérées dans la table avant la soumission de la mutation seront mutées et les données insérées après ne seront pas mutées. Notez que les mutations ne bloquent en aucune façon les INSERTs. + +Une requête de mutation retourne immédiatement après l'ajout de l'entrée de mutation (dans le cas de tables répliquées à ZooKeeper, pour les tables non compliquées - au système de fichiers). La mutation elle-même s'exécute de manière asynchrone en utilisant les paramètres du profil système. Pour suivre l'avancement des mutations vous pouvez utiliser la [`system.mutations`](../operations/system_tables.md#system_tables-mutations) table. Une mutation qui a été soumise avec succès continuera à s'exécuter même si les serveurs ClickHouse sont redémarrés. Il n'y a aucun moyen de faire reculer la mutation une fois qu'elle est soumise, mais si la mutation est bloquée pour une raison quelconque, elle peut être annulée avec le [`KILL MUTATION`](misc.md#kill-mutation) requête. + +Les entrées pour les mutations finies ne sont pas supprimées immédiatement (le nombre d'entrées conservées est déterminé par `finished_mutations_to_keep` le moteur de stockage de paramètre). Les anciennes entrées de mutation sont supprimées. + +[Article Original](https://clickhouse.tech/docs/en/query_language/alter/) diff --git a/docs/fr/query_language/create.md b/docs/fr/query_language/create.md new file mode 100644 index 00000000000..b4a6dea29fb --- /dev/null +++ b/docs/fr/query_language/create.md @@ -0,0 +1,306 @@ +--- +machine_translated: true +--- + +# Créer des requêtes {#create-queries} + +## CREATE DATABASE {#query-language-create-database} + +Crée la base de données. + +``` sql +CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] [ENGINE = engine(...)] +``` + +### Clause {#clauses} + +- `IF NOT EXISTS` + + If the `db_name` database already exists, then ClickHouse doesn't create a new database and: + + - Doesn't throw an exception if clause is specified. + - Throws an exception if clause isn't specified. + +- `ON CLUSTER` + + ClickHouse creates the `db_name` database on all the servers of a specified cluster. + +- `ENGINE` + + - [MySQL](../database_engines/mysql.md) + + Allows you to retrieve data from the remote MySQL server. + + By default, ClickHouse uses its own [database engine](../database_engines/index.md). + +## CREATE TABLE {#create-table-query} + +Le `CREATE TABLE` la requête peut avoir plusieurs formes. + +``` sql +CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] +( + name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [compression_codec] [TTL expr1], + name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [compression_codec] [TTL expr2], + ... +) ENGINE = engine +``` + +Crée une table nommée ‘name’ dans le ‘db’ base de données ou la base de données actuelle si ‘db’ n'est pas définie, avec la structure spécifiée entre parenthèses et l' ‘engine’ moteur. +La structure de la table est une liste de descriptions de colonnes. Si les index sont pris en charge par le moteur, ils sont indiqués comme paramètres pour le moteur de table. + +Une description de colonne est `name type` dans le cas le plus simple. Exemple: `RegionID UInt32`. +Des Expressions peuvent également être définies pour les valeurs par défaut (voir ci-dessous). + +``` sql +CREATE TABLE [IF NOT EXISTS] [db.]table_name AS [db2.]name2 [ENGINE = engine] +``` + +Crée une table avec la même structure qu'une autre table. Vous pouvez spécifier un moteur différent pour la table. Si le moteur n'est pas spécifié, le même moteur sera utilisé que pour la `db2.name2` table. + +``` sql +CREATE TABLE [IF NOT EXISTS] [db.]table_name AS table_function() +``` + +Crée une table avec la structure et les données renvoyées par [fonction de table](table_functions/index.md). + +``` sql +CREATE TABLE [IF NOT EXISTS] [db.]table_name ENGINE = engine AS SELECT ... +``` + +Crée une table avec une structure comme le résultat de l' `SELECT` une requête avec les ‘engine’ moteur, et le remplit avec des données de SELECT. + +Dans tous les cas, si `IF NOT EXISTS` est spécifié, la requête ne renvoie pas une erreur si la table existe déjà. Dans ce cas, la requête ne font rien. + +Il peut y avoir d'autres clauses après le `ENGINE` la clause dans la requête. Voir la documentation détaillée sur la façon de créer des tables dans les descriptions de [moteurs de table](../operations/table_engines/index.md#table_engines). + +### Les Valeurs Par Défaut {#create-default-values} + +La description de colonne peut spécifier une expression pour une valeur par défaut, de l'une des manières suivantes:`DEFAULT expr`, `MATERIALIZED expr`, `ALIAS expr`. +Exemple: `URLDomain String DEFAULT domain(URL)`. + +Si une expression pour la valeur par défaut n'est pas définie, les valeurs par défaut seront définies sur zéros pour les nombres, chaînes vides pour les chaînes, tableaux vides pour les tableaux et `0000-00-00` pour les dates ou `0000-00-00 00:00:00` pour les dates avec le temps. Les valeurs NULL ne sont pas prises en charge. + +Si l'expression par défaut est définie, le type de colonne est facultatif. S'il n'y a pas de type explicitement défini, le type d'expression par défaut est utilisé. Exemple: `EventDate DEFAULT toDate(EventTime)` – the ‘Date’ type sera utilisé pour la ‘EventDate’ colonne. + +Si le type de données et l'expression par défaut sont définis explicitement, cette expression sera convertie au type spécifié à l'aide des fonctions de conversion de type. Exemple: `Hits UInt32 DEFAULT 0` signifie la même chose que `Hits UInt32 DEFAULT toUInt32(0)`. + +Default expressions may be defined as an arbitrary expression from table constants and columns. When creating and changing the table structure, it checks that expressions don't contain loops. For INSERT, it checks that expressions are resolvable – that all columns they can be calculated from have been passed. + +`DEFAULT expr` + +Valeur par défaut normale. Si la requête INSERT ne spécifie pas la colonne correspondante, elle sera remplie en calculant l'expression correspondante. + +`MATERIALIZED expr` + +Expression matérialisée. Une telle colonne ne peut pas être spécifiée pour INSERT, car elle est toujours calculée. +Pour un INSERT sans Liste de colonnes, ces colonnes ne sont pas prises en compte. +De plus, cette colonne n'est pas substituée lors de l'utilisation d'un astérisque dans une requête SELECT. C'est pour préserver l'invariant que le dump obtenu en utilisant `SELECT *` peut être inséré dans la table en utilisant INSERT sans spécifier la liste des colonnes. + +`ALIAS expr` + +Synonyme. Une telle colonne n'est pas du tout stockée dans la table. +Ses valeurs ne peuvent pas être insérées dans une table et elles ne sont pas substituées lors de l'utilisation d'un astérisque dans une requête SELECT. +Il peut être utilisé dans SELECTs si l'alias est développé pendant l'analyse des requêtes. + +Lorsque vous utilisez la requête ALTER pour ajouter de nouvelles colonnes, les anciennes données de ces colonnes ne sont pas écrites. Au lieu de cela, lors de la lecture d'anciennes données qui n'ont pas de valeurs pour les nouvelles colonnes, les expressions sont calculées à la volée par défaut. Cependant, si l'exécution des expressions nécessite différentes colonnes qui ne sont pas indiquées dans la requête, ces colonnes seront en outre lues, mais uniquement pour les blocs de données qui en ont besoin. + +Si vous ajoutez une nouvelle colonne à une table mais modifiez ultérieurement son expression par défaut, les valeurs utilisées pour les anciennes données changeront (pour les données où les valeurs n'ont pas été stockées sur le disque). Notez que lors de l'exécution de fusions d'arrière-plan, les données des colonnes manquantes dans l'une des parties de fusion sont écrites dans la partie fusionnée. + +Il n'est pas possible de définir des valeurs par défaut pour les éléments dans les structures de données. + +### Contraintes {#constraints} + +Avec les descriptions de colonnes des contraintes peuvent être définies: + +``` sql +CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] +( + name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [compression_codec] [TTL expr1], + ... + CONSTRAINT constraint_name_1 CHECK boolean_expr_1, + ... +) ENGINE = engine +``` + +`boolean_expr_1` pourrait par n'importe quelle expression booléenne. Si les contraintes sont définies pour la table, chacun d'eux sera vérifiée pour chaque ligne `INSERT` query. If any constraint is not satisfied — server will raise an exception with constraint name and checking expression. + +L'ajout d'une grande quantité de contraintes peut affecter négativement les performances de big `INSERT` requête. + +### Expression TTL {#ttl-expression} + +Définit la durée de stockage des valeurs. Peut être spécifié uniquement pour les tables mergetree-family. Pour la description détaillée, voir [TTL pour les colonnes et les tableaux](../operations/table_engines/mergetree.md#table_engine-mergetree-ttl). + +### Codecs De Compression De Colonne {#codecs} + +Par défaut, ClickHouse applique le `lz4` méthode de compression. Pour `MergeTree`- famille de moteurs Vous pouvez modifier la méthode de compression par défaut dans le [compression](../operations/server_settings/settings.md#server-settings-compression) section d'une configuration de serveur. Vous pouvez également définir la méthode de compression pour chaque colonne `CREATE TABLE` requête. + +``` sql +CREATE TABLE codec_example +( + dt Date CODEC(ZSTD), + ts DateTime CODEC(LZ4HC), + float_value Float32 CODEC(NONE), + double_value Float64 CODEC(LZ4HC(9)) + value Float32 CODEC(Delta, ZSTD) +) +ENGINE = +... +``` + +Si un codec est spécifié, le codec par défaut ne s'applique pas. Les Codecs peuvent être combinés dans un pipeline, par exemple, `CODEC(Delta, ZSTD)`. Pour sélectionner la meilleure combinaison de codecs pour votre projet, passez des benchmarks similaires à ceux décrits dans Altinity [Nouveaux encodages pour améliorer L'efficacité du ClickHouse](https://www.altinity.com/blog/2019/7/new-encodings-to-improve-clickhouse) article. + +!!! warning "Avertissement" + Vous ne pouvez pas décompresser les fichiers de base de données ClickHouse avec des utilitaires externes tels que `lz4`. Au lieu de cela, utilisez le spécial [clickhouse-compresseur](https://github.com/ClickHouse/ClickHouse/tree/master/dbms/programs/compressor) utilitaire. + +La Compression est prise en charge pour les moteurs de tableau suivants: + +- [MergeTree](../operations/table_engines/mergetree.md) famille. Prend en charge les codecs de compression de colonne et la sélection de la méthode de compression par défaut par [compression](../operations/server_settings/settings.md#server-settings-compression) paramètre. +- [Journal](../operations/table_engines/log_family.md) famille. Utilise la `lz4` méthode de compression par défaut et prend en charge les codecs de compression de colonne. +- [Définir](../operations/table_engines/set.md). Uniquement pris en charge la compression par défaut. +- [Rejoindre](../operations/table_engines/join.md). Uniquement pris en charge la compression par défaut. + +ClickHouse prend en charge les codecs à usage commun et les codecs spécialisés. + +#### Codecs Spécialisés {#create-query-specialized-codecs} + +Ces codecs sont conçus pour rendre la compression plus efficace en utilisant des fonctionnalités spécifiques des données. Certains de ces codecs ne compressent pas les données eux-mêmes. Au lieu de cela, ils préparent les données pour un codec à usage commun, qui les compresse mieux que sans cette préparation. + +Spécialisé codecs: + +- `Delta(delta_bytes)` — Compression approach in which raw values are replaced by the difference of two neighboring values, except for the first value that stays unchanged. Up to `delta_bytes` sont utilisés pour stocker des valeurs delta, donc `delta_bytes` est la taille maximale des valeurs brutes. Possible `delta_bytes` valeurs: 1, 2, 4, 8. La valeur par défaut pour `delta_bytes` être `sizeof(type)` si égale à 1, 2, 4 ou 8. Dans tous les autres cas, c'est 1. +- `DoubleDelta` — Calculates delta of deltas and writes it in compact binary form. Optimal compression rates are achieved for monotonic sequences with a constant stride, such as time series data. Can be used with any fixed-width type. Implements the algorithm used in Gorilla TSDB, extending it to support 64-bit types. Uses 1 extra bit for 32-byte deltas: 5-bit prefixes instead of 4-bit prefixes. For additional information, see Compressing Time Stamps in [Gorilla: Une Base De Données De Séries Chronologiques Rapide, Évolutive Et En Mémoire](http://www.vldb.org/pvldb/vol8/p1816-teller.pdf). +- `Gorilla` — Calculates XOR between current and previous value and writes it in compact binary form. Efficient when storing a series of floating point values that change slowly, because the best compression rate is achieved when neighboring values are binary equal. Implements the algorithm used in Gorilla TSDB, extending it to support 64-bit types. For additional information, see Compressing Values in [Gorilla: Une Base De Données De Séries Chronologiques Rapide, Évolutive Et En Mémoire](http://www.vldb.org/pvldb/vol8/p1816-teller.pdf). +- `T64` — Compression approach that crops unused high bits of values in integer data types (including `Enum`, `Date` et `DateTime`). À chaque étape de son algorithme, le codec prend un bloc de 64 valeurs, les place dans une matrice de 64x64 bits, le transpose, recadre les bits de valeurs inutilisés et renvoie le reste sous forme de séquence. Les bits inutilisés sont les bits, qui ne diffèrent pas entre les valeurs maximum et minimum dans la partie de données entière pour laquelle la compression est utilisée. + +`DoubleDelta` et `Gorilla` les codecs sont utilisés dans Gorilla TSDB comme composants de son algorithme de compression. L'approche Gorilla est efficace dans les scénarios où il y a une séquence de valeurs qui changent lentement avec leurs horodatages. Les horodatages sont effectivement compressés par le `DoubleDelta` codec, et les valeurs sont effectivement comprimé par le `Gorilla` codec. Par exemple, pour obtenir une table stockée efficacement, vous pouvez la créer dans la configuration suivante: + +``` sql +CREATE TABLE codec_example +( + timestamp DateTime CODEC(DoubleDelta), + slow_values Float32 CODEC(Gorilla) +) +ENGINE = MergeTree() +``` + +#### Codecs à usage commun {#create-query-common-purpose-codecs} + +Codec: + +- `NONE` — No compression. +- `LZ4` — Lossless [algorithme de compression de données](https://github.com/lz4/lz4) utilisé par défaut. Applique la compression rapide LZ4. +- `LZ4HC[(level)]` — LZ4 HC (high compression) algorithm with configurable level. Default level: 9. Setting `level <= 0` s'applique le niveau par défaut. Niveaux possibles: \[1, 12\]. Plage de niveau recommandée: \[4, 9\]. +- `ZSTD[(level)]` — [Algorithme de compression ZSTD](https://en.wikipedia.org/wiki/Zstandard) avec configurables `level`. Niveaux possibles: \[1, 22\]. Valeur par défaut: 1. + +Des niveaux de compression élevés sont utiles pour les scénarios asymétriques, comme compresser une fois, décompresser à plusieurs reprises. Des niveaux plus élevés signifient une meilleure compression et une utilisation plus élevée du processeur. + +## Les Tables Temporaires {#temporary-tables} + +Clickhouse prend en charge les tables temporaires qui ont les caractéristiques suivantes: + +- Les tables temporaires disparaissent à la fin de la session, y compris si la connexion est perdue. +- Une table temporaire utilise uniquement le moteur de mémoire. +- La base de données ne peut pas être spécifiée pour une table temporaire. Il est créé en dehors des bases de données. +- Impossible de créer une table temporaire avec une requête DDL distribuée sur tous les serveurs de cluster (en utilisant `ON CLUSTER`): ce tableau n'existe que dans la session en cours. +- Si une table temporaire a le même nom qu'une autre et qu'une requête spécifie le nom de la table sans spécifier la base de données, la table temporaire sera utilisée. +- Pour le traitement des requêtes distribuées, les tables temporaires utilisées dans une requête sont transmises à des serveurs distants. + +Pour créer une table temporaire, utilisez la syntaxe suivante: + +``` sql +CREATE TEMPORARY TABLE [IF NOT EXISTS] table_name +( + name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1], + name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2], + ... +) +``` + +Dans la plupart des cas, les tables temporaires ne sont pas créées manuellement, mais lors de l'utilisation de données externes pour une requête ou pour `(GLOBAL) IN`. Pour plus d'informations, consultez les sections appropriées + +Il est possible d'utiliser des tables avec [Moteur = mémoire](../operations/table_engines/memory.md) au lieu de tables temporaires. + +## Requêtes DDL distribuées (sur la clause CLUSTER) {#distributed-ddl-queries-on-cluster-clause} + +Le `CREATE`, `DROP`, `ALTER`, et `RENAME` les requêtes prennent en charge l'exécution distribuée sur un cluster. +Par exemple, la requête suivante crée la `all_hits` `Distributed` tableau sur chaque ordinateur hôte `cluster`: + +``` sql +CREATE TABLE IF NOT EXISTS all_hits ON CLUSTER cluster (p Date, i Int32) ENGINE = Distributed(cluster, default, hits) +``` + +Pour exécuter ces requêtes correctement, chaque hôte doit avoir la même définition de cluster (pour simplifier la synchronisation des configs, vous pouvez utiliser des substitutions de ZooKeeper). Ils doivent également se connecter aux serveurs ZooKeeper. +La version locale de la requête sera finalement implémentée sur chaque hôte du cluster, même si certains hôtes ne sont actuellement pas disponibles. L'ordre d'exécution des requêtes au sein d'un seul hôte est garanti. + +## CREATE VIEW {#create-view} + +``` sql +CREATE [MATERIALIZED] VIEW [IF NOT EXISTS] [db.]table_name [TO[db.]name] [ENGINE = engine] [POPULATE] AS SELECT ... +``` + +Crée une vue. Il existe deux types de vues: normale et matérialisée. + +Les vues normales ne stockent aucune donnée, mais effectuent simplement une lecture à partir d'une autre table. En d'autres termes, une vue normale n'est rien de plus qu'une requête enregistrée. Lors de la lecture à partir d'une vue, cette requête enregistrée est utilisée comme sous-requête dans la clause FROM. + +Par exemple, supposons que vous avez créé une vue: + +``` sql +CREATE VIEW view AS SELECT ... +``` + +et écrit une requête: + +``` sql +SELECT a, b, c FROM view +``` + +Cette requête est entièrement équivalente à l'utilisation de la sous requête: + +``` sql +SELECT a, b, c FROM (SELECT ...) +``` + +Les vues matérialisées stockent les données transformées par la requête SELECT correspondante. + +Lors de la création d'une vue matérialisée sans `TO [db].[table]`, you must specify ENGINE – the table engine for storing data. + +Lors de la création d'une vue matérialisée avec `TO [db].[table]` vous ne devez pas utiliser `POPULATE`. + +Une vue matérialisée est agencée comme suit: lors de l'insertion de données dans la table spécifiée dans SELECT, une partie des données insérées est convertie par cette requête SELECT, et le résultat est inséré dans la vue. + +Si vous spécifiez POPULATE, les données de table existantes sont insérées dans la vue lors de sa création, comme si `CREATE TABLE ... AS SELECT ...` . Sinon, la requête ne contient que les données insérées dans la table après la création de la vue. Nous ne recommandons pas D'utiliser POPULATE, car les données insérées dans la table lors de la création de la vue ne seront pas insérées dedans. + +A `SELECT` la requête peut contenir `DISTINCT`, `GROUP BY`, `ORDER BY`, `LIMIT`… Note that the corresponding conversions are performed independently on each block of inserted data. For example, if `GROUP BY` est définie, les données sont agrégées lors de l'insertion, mais uniquement dans un seul paquet de données insérées. Les données ne seront pas agrégées davantage. L'exception concerne l'utilisation d'un moteur qui effectue indépendamment l'agrégation de données, par exemple `SummingMergeTree`. + +L'exécution de `ALTER` les requêtes sur les vues matérialisées n'ont pas été complètement développées, elles pourraient donc être gênantes. Si la vue matérialisée utilise la construction `TO [db.]name` vous pouvez `DETACH` la vue, exécutez `ALTER` pour la table cible, puis `ATTACH` précédemment détaché (`DETACH`) vue. + +Les vues ressemblent aux tables normales. Par exemple, ils sont répertoriés dans le résultat de la `SHOW TABLES` requête. + +Il n'y a pas de requête séparée pour supprimer des vues. Pour supprimer une vue, utilisez `DROP TABLE`. + +## CREATE DICTIONARY {#create-dictionary-query} + +``` sql +CREATE DICTIONARY [IF NOT EXISTS] [db.]dictionary_name [ON CLUSTER cluster] +( + key1 type1 [DEFAULT|EXPRESSION expr1] [HIERARCHICAL|INJECTIVE|IS_OBJECT_ID], + key2 type2 [DEFAULT|EXPRESSION expr2] [HIERARCHICAL|INJECTIVE|IS_OBJECT_ID], + attr1 type2 [DEFAULT|EXPRESSION expr3], + attr2 type2 [DEFAULT|EXPRESSION expr4] +) +PRIMARY KEY key1, key2 +SOURCE(SOURCE_NAME([param1 value1 ... paramN valueN])) +LAYOUT(LAYOUT_NAME([param_name param_value])) +LIFETIME([MIN val1] MAX val2) +``` + +Crée [externe dictionnaire](dicts/external_dicts.md) avec le [structure](dicts/external_dicts_dict_structure.md), [source](dicts/external_dicts_dict_sources.md), [disposition](dicts/external_dicts_dict_layout.md) et [vie](dicts/external_dicts_dict_lifetime.md). + +Structure de dictionnaire externe se compose d'attributs. Les attributs du dictionnaire sont spécifiés de la même manière que les colonnes du tableau. La seule propriété d'attribut requise est son type, toutes les autres propriétés peuvent avoir des valeurs par défaut. + +Selon le dictionnaire [disposition](dicts/external_dicts_dict_layout.md) un ou plusieurs attributs peuvent être spécifiés comme les clés de dictionnaire. + +Pour plus d'informations, voir [Dictionnaires Externes](dicts/external_dicts.md) section. + +[Article Original](https://clickhouse.tech/docs/en/query_language/create/) diff --git a/docs/fr/query_language/dicts/external_dicts.md b/docs/fr/query_language/dicts/external_dicts.md new file mode 100644 index 00000000000..eb6829206b3 --- /dev/null +++ b/docs/fr/query_language/dicts/external_dicts.md @@ -0,0 +1,53 @@ +--- +machine_translated: true +--- + +# Dictionnaires Externes {#dicts-external-dicts} + +Vous pouvez ajouter vos propres dictionnaires à partir de diverses sources de données. La source de données d'un dictionnaire peut être un texte local ou un fichier exécutable, une ressource HTTP(S) ou un autre SGBD. Pour plus d'informations, voir “[Sources pour les dictionnaires externes](external_dicts_dict_sources.md)”. + +ClickHouse: + +- Stocke entièrement ou partiellement les dictionnaires en RAM. +- Met à jour périodiquement les dictionnaires et charge dynamiquement les valeurs manquantes. En d'autres mots, les dictionnaires peuvent être chargés dynamiquement. +- Permet de créer des dictionnaires externes avec des fichiers xml ou [Les requêtes DDL](../create.md#create-dictionary-query). + +La configuration des dictionnaires externes peut être située dans un ou plusieurs fichiers xml. Le chemin d'accès à la configuration spécifiée dans le [dictionaries\_config](../../operations/server_settings/settings.md#server_settings-dictionaries_config) paramètre. + +Les dictionnaires peuvent être chargés au démarrage du serveur ou à la première utilisation, en fonction [dictionaries\_lazy\_load](../../operations/server_settings/settings.md#server_settings-dictionaries_lazy_load) paramètre. + +Le fichier de configuration du dictionnaire a le format suivant: + +``` xml + + An optional element with any content. Ignored by the ClickHouse server. + + + /etc/metrika.xml + + + + + + + + +``` + +Vous pouvez [configurer](external_dicts_dict.md) le nombre de dictionnaires dans le même fichier. + +[Requêtes DDL pour les dictionnaires](../create.md#create-dictionary-query) ne nécessite aucun enregistrement supplémentaire dans la configuration du serveur. Ils permettent de travailler avec des dictionnaires en tant qu'entités de première classe, comme des tables ou des vues. + +!!! attention "Attention" + Vous pouvez convertir les valeurs pour un petit dictionnaire en le décrivant dans un `SELECT` requête (voir la [transformer](../functions/other_functions.md) fonction). Cette fonctionnalité n'est pas liée aux dictionnaires externes. + +## Voir aussi {#ext-dicts-see-also} + +- [Configuration D'un dictionnaire externe](external_dicts_dict.md) +- [Stockage des dictionnaires en mémoire](external_dicts_dict_layout.md) +- [Mises À Jour Du Dictionnaire](external_dicts_dict_lifetime.md) +- [Sources de dictionnaires externes](external_dicts_dict_sources.md) +- [Clé et champs du dictionnaire](external_dicts_dict_structure.md) +- [Fonctions pour travailler avec des dictionnaires externes](../functions/ext_dict_functions.md) + +[Article Original](https://clickhouse.tech/docs/en/query_language/dicts/external_dicts/) diff --git a/docs/fr/query_language/dicts/external_dicts_dict.md b/docs/fr/query_language/dicts/external_dicts_dict.md new file mode 100644 index 00000000000..8012fc15cef --- /dev/null +++ b/docs/fr/query_language/dicts/external_dicts_dict.md @@ -0,0 +1,50 @@ +--- +machine_translated: true +--- + +# Configuration D'un dictionnaire externe {#dicts-external-dicts-dict} + +Si dictionary est configuré à l'aide d'un fichier xml, than dictionary configuration a la structure suivante: + +``` xml + + dict_name + + + + + + + + + + + + + + + + + +``` + +Correspondant [DDL-requête](../create.md#create-dictionary-query) a la structure suivante: + +``` sql +CREATE DICTIONARY dict_name +( + ... -- attributes +) +PRIMARY KEY ... -- complex or single key configuration +SOURCE(...) -- Source configuration +LAYOUT(...) -- Memory layout configuration +LIFETIME(...) -- Lifetime of dictionary in memory +``` + +- `name` – The identifier that can be used to access the dictionary. Use the characters `[a-zA-Z0-9_\-]`. +- [source](external_dicts_dict_sources.md) — Source of the dictionary. +- [disposition](external_dicts_dict_layout.md) — Dictionary layout in memory. +- [structure](external_dicts_dict_structure.md) — Structure of the dictionary . A key and attributes that can be retrieved by this key. +- [vie](external_dicts_dict_lifetime.md) — Frequency of dictionary updates. + +[Article Original](https://clickhouse.tech/docs/en/query_language/dicts/external_dicts_dict/) diff --git a/docs/fr/query_language/dicts/external_dicts_dict_hierarchical.md b/docs/fr/query_language/dicts/external_dicts_dict_hierarchical.md new file mode 100644 index 00000000000..923e231e6b5 --- /dev/null +++ b/docs/fr/query_language/dicts/external_dicts_dict_hierarchical.md @@ -0,0 +1,67 @@ +--- +machine_translated: true +--- + +# Dictionnaires Hiérarchiques {#hierarchical-dictionaries} + +Clickhouse prend en charge les dictionnaires hiérarchiques avec un [touche numérique](external_dicts_dict_structure.md#ext_dict-numeric-key). + +Voici une structure hiérarchique: + +``` text +0 (Common parent) +│ +├── 1 (Russia) +│ │ +│ └── 2 (Moscow) +│ │ +│ └── 3 (Center) +│ +└── 4 (Great Britain) + │ + └── 5 (London) +``` + +Cette hiérarchie peut être exprimée comme la table de dictionnaire suivante. + +| id\_région | région\_parent | nom\_région | +|------------|----------------|--------------------| +| 1 | 0 | Russie | +| 2 | 1 | Moscou | +| 3 | 2 | Center | +| 4 | 0 | La Grande-Bretagne | +| 5 | 4 | Londres | + +Ce tableau contient une colonne `parent_region` qui contient la clé du parent le plus proche de l'élément. + +Clickhouse soutient le [hiérarchique](external_dicts_dict_structure.md#hierarchical-dict-attr) propriété pour [externe dictionnaire](index.md) attribut. Cette propriété vous permet de configurer le dictionnaire hiérarchique comme décrit ci-dessus. + +Le [dictGetHierarchy](../functions/ext_dict_functions.md#dictgethierarchy) la fonction vous permet d'obtenir la chaîne parent d'un élément. + +Pour notre exemple, la structure du dictionnaire peut être la suivante: + +``` xml + + + + region_id + + + + parent_region + UInt64 + 0 + true + + + + region_name + String + + + + + +``` + +[Article Original](https://clickhouse.tech/docs/en/query_language/dicts/external_dicts_dict_hierarchical/) diff --git a/docs/fr/query_language/dicts/external_dicts_dict_layout.md b/docs/fr/query_language/dicts/external_dicts_dict_layout.md new file mode 100644 index 00000000000..1132af859af --- /dev/null +++ b/docs/fr/query_language/dicts/external_dicts_dict_layout.md @@ -0,0 +1,370 @@ +--- +machine_translated: true +--- + +# Stockage des dictionnaires en mémoire {#dicts-external-dicts-dict-layout} + +Il existe une variété de façons de stocker les dictionnaires en mémoire. + +Nous vous recommandons [plat](#flat), [haché](#dicts-external_dicts_dict_layout-hashed) et [complex\_key\_hashed](#complex-key-hashed). qui fournissent la vitesse de traitement optimale. + +La mise en cache n'est pas recommandée en raison de performances potentiellement médiocres et de difficultés à sélectionner les paramètres optimaux. En savoir plus dans la section “[cache](#cache)”. + +Il existe plusieurs façons d'améliorer les performances du dictionnaire: + +- Appelez la fonction pour travailler avec le dictionnaire après `GROUP BY`. +- Marquer les attributs à extraire comme injectifs. Un attribut est appelé injectif si différentes valeurs d'attribut correspondent à différentes clés. Alors, quand `GROUP BY` utilise une fonction qui récupère une valeur d'attribut par la clé, cette fonction est automatiquement retirée de `GROUP BY`. + +ClickHouse génère une exception pour les erreurs avec les dictionnaires. Des exemples d'erreurs: + +- Le dictionnaire accessible n'a pas pu être chargé. +- Erreur de la requête d'une `cached` dictionnaire. + +Vous pouvez afficher la liste des dictionnaires externes et leurs statuts dans le `system.dictionaries` table. + +La configuration ressemble à ceci: + +``` xml + + + ... + + + + + + ... + + +``` + +Correspondant [DDL-requête](../create.md#create-dictionary-query): + +``` sql +CREATE DICTIONARY (...) +... +LAYOUT(LAYOUT_TYPE(param value)) -- layout settings +... +``` + +## Façons de stocker des dictionnaires en mémoire {#ways-to-store-dictionaries-in-memory} + +- [plat](#flat) +- [haché](#dicts-external_dicts_dict_layout-hashed) +- [sparse\_hashed](#dicts-external_dicts_dict_layout-sparse_hashed) +- [cache](#cache) +- [range\_hashed](#range-hashed) +- [complex\_key\_hashed](#complex-key-hashed) +- [complex\_key\_cache](#complex-key-cache) +- [ip\_trie](#ip-trie) + +### plat {#flat} + +Le dictionnaire est complètement stocké en mémoire sous la forme de tableaux plats. Combien de mémoire le dictionnaire utilise-t-il? Le montant est proportionnel à la taille de la plus grande clé (dans l'espace). + +La clé du dictionnaire a le `UInt64` type et la valeur est limitée à 500 000. Si une clé plus grande est découverte lors de la création du dictionnaire, ClickHouse lève une exception et ne crée pas le dictionnaire. + +Tous les types de sources sont pris en charge. Lors de la mise à jour, les données (à partir d'un fichier ou d'une table) sont lues dans leur intégralité. + +Cette méthode fournit les meilleures performances parmi toutes les méthodes disponibles de stockage du dictionnaire. + +Exemple de Configuration: + +``` xml + + + +``` + +ou + +``` sql +LAYOUT(FLAT()) +``` + +### haché {#dicts-external_dicts_dict_layout-hashed} + +Le dictionnaire est entièrement stockée en mémoire sous la forme d'une table de hachage. Le dictionnaire peut contenir n'importe quel nombre d'éléments avec tous les identificateurs Dans la pratique, le nombre de clés peut atteindre des dizaines de millions d'articles. + +Tous les types de sources sont pris en charge. Lors de la mise à jour, les données (à partir d'un fichier ou d'une table) sont lues dans leur intégralité. + +Exemple de Configuration: + +``` xml + + + +``` + +ou + +``` sql +LAYOUT(HASHED()) +``` + +### sparse\_hashed {#dicts-external_dicts_dict_layout-sparse_hashed} + +Semblable à `hashed`, mais utilise moins de mémoire en faveur de plus D'utilisation du processeur. + +Exemple de Configuration: + +``` xml + + + +``` + +``` sql +LAYOUT(SPARSE_HASHED()) +``` + +### complex\_key\_hashed {#complex-key-hashed} + +Ce type de stockage est pour une utilisation avec composite [touches](external_dicts_dict_structure.md). Semblable à `hashed`. + +Exemple de Configuration: + +``` xml + + + +``` + +``` sql +LAYOUT(COMPLEX_KEY_HASHED()) +``` + +### range\_hashed {#range-hashed} + +Le dictionnaire est stocké en mémoire sous la forme d'une table de hachage avec un tableau ordonné de gammes et leurs valeurs correspondantes. + +Cette méthode de stockage fonctionne de la même manière que hachée et permet d'utiliser des plages de date / heure (Type numérique arbitraire) en plus de la clé. + +Exemple: Le tableau contient des réductions pour chaque annonceur dans le format: + +``` text ++---------------|---------------------|-------------------|--------+ +| advertiser id | discount start date | discount end date | amount | ++===============+=====================+===================+========+ +| 123 | 2015-01-01 | 2015-01-15 | 0.15 | ++---------------|---------------------|-------------------|--------+ +| 123 | 2015-01-16 | 2015-01-31 | 0.25 | ++---------------|---------------------|-------------------|--------+ +| 456 | 2015-01-01 | 2015-01-15 | 0.05 | ++---------------|---------------------|-------------------|--------+ +``` + +Pour utiliser un échantillon pour les plages de dates, définissez `range_min` et `range_max` éléments dans le [structure](external_dicts_dict_structure.md). Ces éléments doivent contenir des éléments `name` et`type` (si `type` n'est pas spécifié, le type par défaut sera utilisé-Date). `type` peut être n'importe quel type numérique (Date / DateTime / UInt64 / Int32 / autres). + +Exemple: + +``` xml + + + Id + + + first + Date + + + last + Date + + ... +``` + +ou + +``` sql +CREATE DICTIONARY somedict ( + id UInt64, + first Date, + last Date +) +PRIMARY KEY id +LAYOUT(RANGE_HASHED()) +RANGE(MIN first MAX last) +``` + +Pour travailler avec ces dictionnaires, vous devez passer un argument supplémentaire à l' `dictGetT` fonction, pour laquelle une plage est sélectionnée: + +``` sql +dictGetT('dict_name', 'attr_name', id, date) +``` + +Cette fonction retourne la valeur pour l' `id`s et la plage de dates qui inclut la date passée. + +Détails de l'algorithme: + +- Si l' `id` est introuvable ou une plage n'est pas trouvé pour l' `id` il retourne la valeur par défaut pour le dictionnaire. +- S'il y a des plages qui se chevauchent, vous pouvez en utiliser. +- Si le délimiteur est `NULL` ou une date non valide (telle que 1900-01-01 ou 2039-01-01), la plage est laissée ouverte. La gamme peut être ouverte des deux côtés. + +Exemple de Configuration: + +``` xml + + + + ... + + + + + + + + Abcdef + + + StartTimeStamp + UInt64 + + + EndTimeStamp + UInt64 + + + XXXType + String + + + + + + +``` + +ou + +``` sql +CREATE DICTIONARY somedict( + Abcdef UInt64, + StartTimeStamp UInt64, + EndTimeStamp UInt64, + XXXType String DEFAULT '' +) +PRIMARY KEY Abcdef +RANGE(MIN StartTimeStamp MAX EndTimeStamp) +``` + +### cache {#cache} + +Le dictionnaire est stocké dans un cache qui a un nombre fixe de cellules. Ces cellules contiennent des éléments fréquemment utilisés. + +Lors de la recherche d'un dictionnaire, le cache est recherché en premier. Pour chaque bloc de données, toutes les clés qui ne sont pas trouvées dans le cache ou qui sont obsolètes sont demandées à la source en utilisant `SELECT attrs... FROM db.table WHERE id IN (k1, k2, ...)`. Les données reçues sont ensuite écrites dans le cache. + +Pour les dictionnaires de cache, l'expiration [vie](external_dicts_dict_lifetime.md) des données dans le cache peuvent être définies. Si plus de temps que `lifetime` passé depuis le chargement des données dans une cellule, la valeur de la cellule n'est pas utilisée et elle est demandée à nouveau la prochaine fois qu'elle doit être utilisée. +C'est la moins efficace de toutes les façons de stocker les dictionnaires. La vitesse du cache dépend fortement des paramètres corrects et que le scénario d'utilisation. Un dictionnaire de type de cache fonctionne bien uniquement lorsque les taux de réussite sont suffisamment élevés (recommandé 99% et plus). Vous pouvez afficher le taux de réussite moyen dans le `system.dictionaries` table. + +Pour améliorer les performances du cache, utilisez une sous-requête avec `LIMIT`, et appelez la fonction avec le dictionnaire en externe. + +Soutenu [source](external_dicts_dict_sources.md): MySQL, ClickHouse, exécutable, HTTP. + +Exemple de paramètres: + +``` xml + + + + 1000000000 + + +``` + +ou + +``` sql +LAYOUT(CACHE(SIZE_IN_CELLS 1000000000)) +``` + +Définissez une taille de cache suffisamment grande. Vous devez expérimenter pour sélectionner le nombre de cellules: + +1. Définissez une valeur. +2. Exécutez les requêtes jusqu'à ce que le cache soit complètement plein. +3. Évaluer la consommation de mémoire en utilisant le `system.dictionaries` table. +4. Augmentez ou diminuez le nombre de cellules jusqu'à ce que la consommation de mémoire requise soit atteinte. + +!!! warning "Avertissement" + N'utilisez pas ClickHouse comme source, car le traitement des requêtes avec des lectures aléatoires est lent. + +### complex\_key\_cache {#complex-key-cache} + +Ce type de stockage est pour une utilisation avec composite [touches](external_dicts_dict_structure.md). Semblable à `cache`. + +### ip\_trie {#ip-trie} + +Ce type de stockage permet de mapper des préfixes de réseau (adresses IP) à des métadonnées telles que ASN. + +Exemple: la table contient les préfixes de réseau et leur correspondant en tant que numéro et Code de pays: + +``` text + +-----------------|-------|--------+ + | prefix | asn | cca2 | + +=================+=======+========+ + | 202.79.32.0/20 | 17501 | NP | + +-----------------|-------|--------+ + | 2620:0:870::/48 | 3856 | US | + +-----------------|-------|--------+ + | 2a02:6b8:1::/48 | 13238 | RU | + +-----------------|-------|--------+ + | 2001:db8::/32 | 65536 | ZZ | + +-----------------|-------|--------+ +``` + +Lorsque vous utilisez ce type de mise en page, la structure doit avoir une clé composite. + +Exemple: + +``` xml + + + + prefix + String + + + + asn + UInt32 + + + + cca2 + String + ?? + + ... +``` + +ou + +``` sql +CREATE DICTIONARY somedict ( + prefix String, + asn UInt32, + cca2 String DEFAULT '??' +) +PRIMARY KEY prefix +``` + +La clé ne doit avoir qu'un seul attribut de type chaîne contenant un préfixe IP autorisé. Les autres types ne sont pas encore pris en charge. + +Pour les requêtes, vous devez utiliser les mêmes fonctions (`dictGetT` avec un n-uplet) comme pour les dictionnaires avec des clés composites: + +``` sql +dictGetT('dict_name', 'attr_name', tuple(ip)) +``` + +La fonction prend soit `UInt32` pour IPv4, ou `FixedString(16)` pour IPv6: + +``` sql +dictGetString('prefix', 'asn', tuple(IPv6StringToNum('2001:db8::1'))) +``` + +Les autres types ne sont pas encore pris en charge. La fonction renvoie l'attribut du préfixe correspondant à cette adresse IP. S'il y a chevauchement des préfixes, le plus spécifique est retourné. + +Les données sont stockées dans une `trie`. Il doit complètement s'intégrer dans la RAM. + +[Article Original](https://clickhouse.tech/docs/en/query_language/dicts/external_dicts_dict_layout/) diff --git a/docs/fr/query_language/dicts/external_dicts_dict_lifetime.md b/docs/fr/query_language/dicts/external_dicts_dict_lifetime.md new file mode 100644 index 00000000000..ee4d1717a26 --- /dev/null +++ b/docs/fr/query_language/dicts/external_dicts_dict_lifetime.md @@ -0,0 +1,83 @@ +--- +machine_translated: true +--- + +# Mises À Jour Du Dictionnaire {#dictionary-updates} + +ClickHouse met périodiquement à jour les dictionnaires. L'intervalle de mise à jour pour les dictionnaires entièrement téléchargés et l'intervalle d'invalidation pour les dictionnaires `` tag en quelques secondes. + +Les mises à jour du dictionnaire (autres que le chargement pour la première utilisation) ne bloquent pas les requêtes. Lors des mises à jour, l'ancienne version d'un dictionnaire est utilisée. Si une erreur se produit pendant une mise à jour, l'erreur est écrite dans le journal du serveur et les requêtes continuent d'utiliser l'ancienne version des dictionnaires. + +Exemple de paramètres: + +``` xml + + ... + 300 + ... + +``` + +``` sql +CREATE DICTIONARY (...) +... +LIFETIME(300) +... +``` + +Paramètre `0` (`LIFETIME(0)`) empêche la mise à jour des dictionnaires. + +Vous pouvez définir un intervalle de temps pour les mises à niveau, et ClickHouse choisira un temps uniformément aléatoire dans cette plage. Ceci est nécessaire pour répartir la charge sur la source du dictionnaire lors de la mise à niveau sur un grand nombre de serveurs. + +Exemple de paramètres: + +``` xml + + ... + + 300 + 360 + + ... + +``` + +ou + +``` sql +LIFETIME(MIN 300 MAX 360) +``` + +Lors de la mise à niveau des dictionnaires, le serveur ClickHouse applique une logique différente selon le type de [source](external_dicts_dict_sources.md): + +- Pour un fichier texte, il vérifie l'heure de la modification. Si l'heure diffère de l'heure enregistrée précédemment, le dictionnaire est mis à jour. +- Pour les tables MyISAM, l'Heure de modification est vérifiée à l'aide d'un `SHOW TABLE STATUS` requête. +- Les dictionnaires d'autres sources sont mis à jour à chaque fois par défaut. + +Pour les sources MySQL (InnoDB), ODBC et ClickHouse, vous pouvez configurer une requête qui mettra à jour les dictionnaires uniquement s'ils ont vraiment changé, plutôt que chaque fois. Pour ce faire, suivez ces étapes: + +- La table de dictionnaire doit avoir un champ qui change toujours lorsque les données source sont mises à jour. +- Les paramètres de la source doivent spécifier une requête qui récupère le champ de modification. Le serveur ClickHouse interprète le résultat de la requête comme une ligne, et si cette ligne a changé par rapport à son état précédent, le dictionnaire est mis à jour. Spécifier la requête dans le `` champ dans les paramètres pour le [source](external_dicts_dict_sources.md). + +Exemple de paramètres: + +``` xml + + ... + + ... + SELECT update_time FROM dictionary_source where id = 1 + + ... + +``` + +ou + +``` sql +... +SOURCE(ODBC(... invalidate_query 'SELECT update_time FROM dictionary_source where id = 1')) +... +``` + +[Article Original](https://clickhouse.tech/docs/en/query_language/dicts/external_dicts_dict_lifetime/) diff --git a/docs/fr/query_language/dicts/external_dicts_dict_sources.md b/docs/fr/query_language/dicts/external_dicts_dict_sources.md new file mode 100644 index 00000000000..2c25aed19f2 --- /dev/null +++ b/docs/fr/query_language/dicts/external_dicts_dict_sources.md @@ -0,0 +1,605 @@ +--- +machine_translated: true +--- + +# Sources de dictionnaires externes {#dicts-external-dicts-dict-sources} + +Externe dictionnaire peut être connecté à partir de nombreuses sources différentes. + +Si dictionary est configuré à l'aide de xml-file, la configuration ressemble à ceci: + +``` xml + + + ... + + + + + + ... + + ... + +``` + +En cas de [DDL-requête](../create.md#create-dictionary-query), configuration égale ressemblera à: + +``` sql +CREATE DICTIONARY dict_name (...) +... +SOURCE(SOURCE_TYPE(param1 val1 ... paramN valN)) -- Source configuration +... +``` + +La source est configurée dans le `source` section. + +Les Types de sources (`source_type`): + +- [Fichier Local](#dicts-external_dicts_dict_sources-local_file) +- [Fichier exécutable](#dicts-external_dicts_dict_sources-executable) +- [HTTP(S)](#dicts-external_dicts_dict_sources-http) +- DBMS + - [ODBC](#dicts-external_dicts_dict_sources-odbc) + - [MySQL](#dicts-external_dicts_dict_sources-mysql) + - [ClickHouse](#dicts-external_dicts_dict_sources-clickhouse) + - [MongoDB](#dicts-external_dicts_dict_sources-mongodb) + - [Redis](#dicts-external_dicts_dict_sources-redis) + +## Fichier Local {#dicts-external_dicts_dict_sources-local_file} + +Exemple de paramètres: + +``` xml + + + /opt/dictionaries/os.tsv + TabSeparated + + +``` + +ou + +``` sql +SOURCE(FILE(path '/opt/dictionaries/os.tsv' format 'TabSeparated')) +``` + +Définition des champs: + +- `path` – The absolute path to the file. +- `format` – The file format. All the formats described in “[Format](../../interfaces/formats.md#formats)” sont pris en charge. + +## Fichier Exécutable {#dicts-external_dicts_dict_sources-executable} + +Travailler avec des fichiers exécutables en dépend [comment le dictionnaire est stocké dans la mémoire](external_dicts_dict_layout.md). Si le dictionnaire est stocké en utilisant `cache` et `complex_key_cache`, Clickhouse demande les clés nécessaires en envoyant une requête au STDIN du fichier exécutable. Sinon, ClickHouse démarre le fichier exécutable et traite sa sortie comme des données de dictionnaire. + +Exemple de paramètres: + +``` xml + + + cat /opt/dictionaries/os.tsv + TabSeparated + + +``` + +ou + +``` sql +SOURCE(EXECUTABLE(command 'cat /opt/dictionaries/os.tsv' format 'TabSeparated')) +``` + +Définition des champs: + +- `command` – The absolute path to the executable file, or the file name (if the program directory is written to `PATH`). +- `format` – The file format. All the formats described in “[Format](../../interfaces/formats.md#formats)” sont pris en charge. + +## HTTP(S) {#dicts-external_dicts_dict_sources-http} + +Travailler avec un serveur HTTP (S) dépend de [comment le dictionnaire est stocké dans la mémoire](external_dicts_dict_layout.md). Si le dictionnaire est stocké en utilisant `cache` et `complex_key_cache`, Clickhouse demande les clés nécessaires en envoyant une demande via le `POST` méthode. + +Exemple de paramètres: + +``` xml + + + http://[::1]/os.tsv + TabSeparated + + user + password + + +
+ API-KEY + key +
+
+
+ +``` + +ou + +``` sql +SOURCE(HTTP( + url 'http://[::1]/os.tsv' + format 'TabSeparated' + credentials(user 'user' password 'password') + headers(header(name 'API-KEY' value 'key')) +)) +``` + +Pour que ClickHouse accède à une ressource HTTPS, vous devez [configurer openSSL](../../operations/server_settings/settings.md#server_settings-openssl) dans la configuration du serveur. + +Définition des champs: + +- `url` – The source URL. +- `format` – The file format. All the formats described in “[Format](../../interfaces/formats.md#formats)” sont pris en charge. +- `credentials` – Basic HTTP authentication. Optional parameter. + - `user` – Username required for the authentication. + - `password` – Password required for the authentication. +- `headers` – All custom HTTP headers entries used for the HTTP request. Optional parameter. + - `header` – Single HTTP header entry. + - `name` – Identifiant name used for the header send on the request. + - `value` – Value set for a specific identifiant name. + +## ODBC {#dicts-external_dicts_dict_sources-odbc} + +Vous pouvez utiliser cette méthode pour connecter n'importe quelle base de données dotée d'un pilote ODBC. + +Exemple de paramètres: + +``` xml + + + DatabaseName + ShemaName.TableName
+ DSN=some_parameters + SQL_QUERY +
+ +``` + +ou + +``` sql +SOURCE(ODBC( + db 'DatabaseName' + table 'SchemaName.TableName' + connection_string 'DSN=some_parameters' + invalidate_query 'SQL_QUERY' +)) +``` + +Définition des champs: + +- `db` – Name of the database. Omit it if the database name is set in the `` paramètre. +- `table` – Name of the table and schema if exists. +- `connection_string` – Connection string. +- `invalidate_query` – Query for checking the dictionary status. Optional parameter. Read more in the section [Mise à jour des dictionnaires](external_dicts_dict_lifetime.md). + +ClickHouse reçoit des symboles de citation D'ODBC-driver et cite tous les paramètres des requêtes au pilote, il est donc nécessaire de définir le nom de la table en conséquence sur le cas du nom de la table dans la base de données. + +Si vous avez des problèmes avec des encodages lors de l'utilisation d'Oracle, consultez le [FAQ](../../faq/general.md#oracle-odbc-encodings) article. + +### Vulnérabilité connue de la fonctionnalité du dictionnaire ODBC {#known-vulnerability-of-the-odbc-dictionary-functionality} + +!!! attention "Attention" + Lors de la connexion à la base de données via le paramètre de connexion du pilote ODBC `Servername` peut être substitué. Dans ce cas, les valeurs de `USERNAME` et `PASSWORD` de `odbc.ini` sont envoyés au serveur distant et peuvent être compromis. + +**Exemple d'utilisation non sécurisée** + +Configurons unixODBC pour PostgreSQL. Le contenu de `/etc/odbc.ini`: + +``` text +[gregtest] +Driver = /usr/lib/psqlodbca.so +Servername = localhost +PORT = 5432 +DATABASE = test_db +#OPTION = 3 +USERNAME = test +PASSWORD = test +``` + +Si vous faites alors une requête telle que + +``` sql +SELECT * FROM odbc('DSN=gregtest;Servername=some-server.com', 'test_db'); +``` + +Le pilote ODBC enverra des valeurs de `USERNAME` et `PASSWORD` de `odbc.ini` de `some-server.com`. + +### Exemple de connexion PostgreSQL {#example-of-connecting-postgresql} + +Ubuntu OS. + +Installation d'unixODBC et du pilote ODBC pour PostgreSQL: + +``` bash +$ sudo apt-get install -y unixodbc odbcinst odbc-postgresql +``` + +Configuration `/etc/odbc.ini` (ou `~/.odbc.ini`): + +``` text + [DEFAULT] + Driver = myconnection + + [myconnection] + Description = PostgreSQL connection to my_db + Driver = PostgreSQL Unicode + Database = my_db + Servername = 127.0.0.1 + UserName = username + Password = password + Port = 5432 + Protocol = 9.3 + ReadOnly = No + RowVersioning = No + ShowSystemTables = No + ConnSettings = +``` + +La configuration du dictionnaire dans ClickHouse: + +``` xml + + + table_name + + + + + DSN=myconnection + postgresql_table
+
+ + + 300 + 360 + + + + + + + id + + + some_column + UInt64 + 0 + + +
+
+``` + +ou + +``` sql +CREATE DICTIONARY table_name ( + id UInt64, + some_column UInt64 DEFAULT 0 +) +PRIMARY KEY id +SOURCE(ODBC(connection_string 'DSN=myconnection' table 'postgresql_table')) +LAYOUT(HASHED()) +LIFETIME(MIN 300 MAX 360) +``` + +Vous devrez peut-être modifier `odbc.ini` pour spécifier le chemin d'accès complet à la bibliothèque avec le conducteur `DRIVER=/usr/local/lib/psqlodbcw.so`. + +### Exemple de connexion à MS SQL Server {#example-of-connecting-ms-sql-server} + +Ubuntu OS. + +Installation du pilote: : + +``` bash +$ sudo apt-get install tdsodbc freetds-bin sqsh +``` + +Configuration du pilote: + +``` bash + $ cat /etc/freetds/freetds.conf + ... + + [MSSQL] + host = 192.168.56.101 + port = 1433 + tds version = 7.0 + client charset = UTF-8 + + $ cat /etc/odbcinst.ini + ... + + [FreeTDS] + Description = FreeTDS + Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so + Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so + FileUsage = 1 + UsageCount = 5 + + $ cat ~/.odbc.ini + ... + + [MSSQL] + Description = FreeTDS + Driver = FreeTDS + Servername = MSSQL + Database = test + UID = test + PWD = test + Port = 1433 +``` + +Configuration du dictionnaire dans ClickHouse: + +``` xml + + + test + + + dict
+ DSN=MSSQL;UID=test;PWD=test +
+ + + + 300 + 360 + + + + + + + + + k + + + s + String + + + +
+
+``` + +ou + +``` sql +CREATE DICTIONARY test ( + k UInt64, + s String DEFAULT '' +) +PRIMARY KEY k +SOURCE(ODBC(table 'dict' connection_string 'DSN=MSSQL;UID=test;PWD=test')) +LAYOUT(FLAT()) +LIFETIME(MIN 300 MAX 360) +``` + +## DBMS {#dbms} + +### MySQL {#dicts-external_dicts_dict_sources-mysql} + +Exemple de paramètres: + +``` xml + + + 3306 + clickhouse + qwerty + + example01-1 + 1 + + + example01-2 + 1 + + db_name + table_name
+ id=10 + SQL_QUERY +
+ +``` + +ou + +``` sql +SOURCE(MYSQL( + port 3306 + user 'clickhouse' + password 'qwerty' + replica(host 'example01-1' priority 1) + replica(host 'example01-2' priority 1) + db 'db_name' + table 'table_name' + where 'id=10' + invalidate_query 'SQL_QUERY' +)) +``` + +Définition des champs: + +- `port` – The port on the MySQL server. You can specify it for all replicas, or for each one individually (inside ``). + +- `user` – Name of the MySQL user. You can specify it for all replicas, or for each one individually (inside ``). + +- `password` – Password of the MySQL user. You can specify it for all replicas, or for each one individually (inside ``). + +- `replica` – Section of replica configurations. There can be multiple sections. + + - `replica/host` – The MySQL host. + - `replica/priority` – The replica priority. When attempting to connect, ClickHouse traverses the replicas in order of priority. The lower the number, the higher the priority. + +- `db` – Name of the database. + +- `table` – Name of the table. + +- `where` – The selection criteria. The syntax for conditions is the same as for `WHERE` clause dans MySQL, par exemple, `id > 10 AND id < 20`. Paramètre facultatif. + +- `invalidate_query` – Query for checking the dictionary status. Optional parameter. Read more in the section [Mise à jour des dictionnaires](external_dicts_dict_lifetime.md). + +MySQL peut être connecté sur un hôte local via des sockets. Pour ce faire, définissez `host` et `socket`. + +Exemple de paramètres: + +``` xml + + + localhost + /path/to/socket/file.sock + clickhouse + qwerty + db_name + table_name
+ id=10 + SQL_QUERY +
+ +``` + +ou + +``` sql +SOURCE(MYSQL( + host 'localhost' + socket '/path/to/socket/file.sock' + user 'clickhouse' + password 'qwerty' + db 'db_name' + table 'table_name' + where 'id=10' + invalidate_query 'SQL_QUERY' +)) +``` + +### ClickHouse {#dicts-external_dicts_dict_sources-clickhouse} + +Exemple de paramètres: + +``` xml + + + example01-01-1 + 9000 + default + + default + ids
+ id=10 +
+ +``` + +ou + +``` sql +SOURCE(CLICKHOUSE( + host 'example01-01-1' + port 9000 + user 'default' + password '' + db 'default' + table 'ids' + where 'id=10' +)) +``` + +Définition des champs: + +- `host` – The ClickHouse host. If it is a local host, the query is processed without any network activity. To improve fault tolerance, you can create a [Distribué](../../operations/table_engines/distributed.md) table et entrez-le dans les configurations suivantes. +- `port` – The port on the ClickHouse server. +- `user` – Name of the ClickHouse user. +- `password` – Password of the ClickHouse user. +- `db` – Name of the database. +- `table` – Name of the table. +- `where` – The selection criteria. May be omitted. +- `invalidate_query` – Query for checking the dictionary status. Optional parameter. Read more in the section [Mise à jour des dictionnaires](external_dicts_dict_lifetime.md). + +### MongoDB {#dicts-external_dicts_dict_sources-mongodb} + +Exemple de paramètres: + +``` xml + + + localhost + 27017 + + + test + dictionary_source + + +``` + +ou + +``` sql +SOURCE(MONGO( + host 'localhost' + port 27017 + user '' + password '' + db 'test' + collection 'dictionary_source' +)) +``` + +Définition des champs: + +- `host` – The MongoDB host. +- `port` – The port on the MongoDB server. +- `user` – Name of the MongoDB user. +- `password` – Password of the MongoDB user. +- `db` – Name of the database. +- `collection` – Name of the collection. + +### Redis {#dicts-external_dicts_dict_sources-redis} + +Exemple de paramètres: + +``` xml + + + localhost + 6379 + simple + 0 + + +``` + +ou + +``` sql +SOURCE(REDIS( + host 'localhost' + port 6379 + storage_type 'simple' + db_index 0 +)) +``` + +Définition des champs: + +- `host` – The Redis host. +- `port` – The port on the Redis server. +- `storage_type` – The structure of internal Redis storage using for work with keys. `simple` est pour les sources simples et pour les sources à clé unique hachées, `hash_map` est pour les sources hachées avec deux clés. Les sources À Distance et les sources de cache à clé complexe ne sont pas prises en charge. Peut être omis, la valeur par défaut est `simple`. +- `db_index` – The specific numeric index of Redis logical database. May be omitted, default value is 0. + +[Article Original](https://clickhouse.tech/docs/en/query_language/dicts/external_dicts_dict_sources/) diff --git a/docs/fr/query_language/dicts/external_dicts_dict_structure.md b/docs/fr/query_language/dicts/external_dicts_dict_structure.md new file mode 100644 index 00000000000..bca7b07f7d9 --- /dev/null +++ b/docs/fr/query_language/dicts/external_dicts_dict_structure.md @@ -0,0 +1,172 @@ +--- +machine_translated: true +--- + +# Clé et champs du dictionnaire {#dictionary-key-and-fields} + +Le `` la clause décrit la clé du dictionnaire et les champs disponibles pour les requêtes. + +Description XML: + +``` xml + + + + Id + + + + + + + ... + + + +``` + +Les attributs sont décrits dans les éléments: + +- `` — [La colonne de la clé](external_dicts_dict_structure.md#ext_dict_structure-key). +- `` — [Colonne de données](external_dicts_dict_structure.md#ext_dict_structure-attributes). Il peut y avoir un certain nombre d'attributs. + +Requête DDL: + +``` sql +CREATE DICTIONARY dict_name ( + Id UInt64, + -- attributes +) +PRIMARY KEY Id +... +``` + +Les attributs sont décrits dans le corps de la requête: + +- `PRIMARY KEY` — [La colonne de la clé](external_dicts_dict_structure.md#ext_dict_structure-key) +- `AttrName AttrType` — [Colonne de données](external_dicts_dict_structure.md#ext_dict_structure-attributes). Il peut y avoir un certain nombre d'attributs. + +## Clé {#ext_dict_structure-key} + +ClickHouse prend en charge les types de clés suivants: + +- Touche numérique. `UInt64`. Défini dans le `` tag ou en utilisant `PRIMARY KEY` mot. +- Clé Composite. Ensemble de valeurs de types différents. Défini dans la balise `` ou `PRIMARY KEY` mot. + +Une structure xml peut contenir `` ou ``. DDL-requête doit contenir unique `PRIMARY KEY`. + +!!! warning "Avertissement" + Vous ne devez pas décrire clé comme un attribut. + +### Touche Numérique {#ext_dict-numeric-key} + +Type: `UInt64`. + +Exemple de Configuration: + +``` xml + + Id + +``` + +Champs de Configuration: + +- `name` – The name of the column with keys. + +Pour DDL-requête: + +``` sql +CREATE DICTIONARY ( + Id UInt64, + ... +) +PRIMARY KEY Id +... +``` + +- `PRIMARY KEY` – The name of the column with keys. + +### Clé Composite {#composite-key} + +La clé peut être un `tuple` de tous les types de champs. Le [disposition](external_dicts_dict_layout.md) dans ce cas, doit être `complex_key_hashed` ou `complex_key_cache`. + +!!! tip "Conseil" + Une clé composite peut être constitué d'un seul élément. Cela permet d'utiliser une chaîne comme clé, par exemple. + +La structure de clé est définie dans l'élément ``. Les principaux champs sont spécifiés dans le même format que le dictionnaire [attribut](external_dicts_dict_structure.md). Exemple: + +``` xml + + + + field1 + String + + + field2 + UInt32 + + ... + +... +``` + +ou + +``` sql +CREATE DICTIONARY ( + field1 String, + field2 String + ... +) +PRIMARY KEY field1, field2 +... +``` + +Pour une requête à l' `dictGet*` fonction, un tuple est passé comme clé. Exemple: `dictGetString('dict_name', 'attr_name', tuple('string for field1', num_for_field2))`. + +## Attribut {#ext_dict_structure-attributes} + +Exemple de Configuration: + +``` xml + + ... + + Name + ClickHouseDataType + + rand64() + true + true + true + + +``` + +ou + +``` sql +CREATE DICTIONARY somename ( + Name ClickHouseDataType DEFAULT '' EXPRESSION rand64() HIERARCHICAL INJECTIVE IS_OBJECT_ID +) +``` + +Champs de Configuration: + +| Balise | Description | Requis | +|------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------| +| `name` | Nom de la colonne. | Oui | +| `type` | Type de données ClickHouse.
ClickHouse tente de convertir la valeur du dictionnaire vers le type de données spécifié. Par exemple, pour MySQL, le champ peut être `TEXT`, `VARCHAR`, ou `BLOB` dans la table source MySQL, mais il peut être téléchargé comme `String` à ClickHouse.
[Nullable](../../data_types/nullable.md) n'est pas pris en charge. | Oui | +| `null_value` | Valeur par défaut pour un élément inexistant.
Dans l'exemple, c'est une chaîne vide. Vous ne pouvez pas utiliser `NULL` dans ce domaine. | Oui | +| `expression` | [Expression](../syntax.md#syntax-expressions) que ClickHouse s'exécute sur la valeur.
L'expression peut être un nom de colonne dans la base de données SQL distante. Ainsi, vous pouvez l'utiliser pour créer un alias pour la colonne à distance.

Valeur par défaut: aucune expression. | Aucun | +| `hierarchical` | Si `true`, l'attribut contient la valeur d'un parent clé de la clé actuelle. Voir [Dictionnaires Hiérarchiques](external_dicts_dict_hierarchical.md).

Valeur par défaut: `false`. | Aucun | +| `injective` | Indicateur qui indique si le `id -> attribute` l'image est [injective](https://en.wikipedia.org/wiki/Injective_function).
Si `true`, ClickHouse peut automatiquement placer après le `GROUP BY` clause les requêtes aux dictionnaires avec injection. Habituellement, il réduit considérablement le montant de ces demandes.

Valeur par défaut: `false`. | Aucun | +| `is_object_id` | Indicateur qui indique si la requête est exécutée pour un document MongoDB par `ObjectID`.

Valeur par défaut: `false`. | Aucun | + +## Voir Aussi {#see-also} + +- [Fonctions pour travailler avec des dictionnaires externes](../functions/ext_dict_functions.md). + +[Article Original](https://clickhouse.tech/docs/en/query_language/dicts/external_dicts_dict_structure/) diff --git a/docs/fr/query_language/dicts/index.md b/docs/fr/query_language/dicts/index.md new file mode 100644 index 00000000000..dc48bf5d4e6 --- /dev/null +++ b/docs/fr/query_language/dicts/index.md @@ -0,0 +1,18 @@ +--- +machine_translated: true +--- + +# Dictionnaire {#dictionaries} + +Un dictionnaire est une cartographie (`key -> attributes`) qui est pratique pour différents types de listes de référence. + +ClickHouse prend en charge des fonctions spéciales pour travailler avec des dictionnaires qui peuvent être utilisés dans les requêtes. Il est plus facile et plus efficace d'utiliser des dictionnaires avec des fonctions que par une `JOIN` avec des tableaux de référence. + +[NULL](../syntax.md#null) les valeurs ne peuvent pas être stockées dans un dictionnaire. + +Supports ClickHouse: + +- [Construit-dans les dictionnaires](internal_dicts.md#internal_dicts) avec un [ensemble de fonctions](../functions/ym_dict_functions.md). +- [Plug-in (externe) dictionnaires](external_dicts.md) avec un [ensemble de fonctions](../functions/ext_dict_functions.md). + +[Article Original](https://clickhouse.tech/docs/en/query_language/dicts/) diff --git a/docs/fr/query_language/dicts/internal_dicts.md b/docs/fr/query_language/dicts/internal_dicts.md new file mode 100644 index 00000000000..a678254a39a --- /dev/null +++ b/docs/fr/query_language/dicts/internal_dicts.md @@ -0,0 +1,52 @@ +--- +machine_translated: true +--- + +# Dictionnaires internes {#internal_dicts} + +ClickHouse contient une fonction intégrée pour travailler avec une géobase. + +Cela vous permet de: + +- Utilisez L'ID d'une région pour obtenir son nom dans la langue souhaitée. +- Utilisez L'ID d'une région pour obtenir L'ID d'une ville, d'une région, d'un district fédéral, d'un pays ou d'un continent. +- Vérifiez si une région fait partie d'une autre région. +- Obtenez une chaîne de régions parentes. + +Toutes les fonctions prennent en charge “translocality,” la capacité d'utiliser simultanément différentes perspectives sur la propriété de la région. Pour plus d'informations, consultez la section “Functions for working with Yandex.Metrica dictionaries”. + +Les dictionnaires internes sont désactivés dans le package par défaut. +Pour les activer, décommentez les paramètres `path_to_regions_hierarchy_file` et `path_to_regions_names_files` dans le fichier de configuration du serveur. + +La géobase est chargée à partir de fichiers texte. + +Place de la `regions_hierarchy*.txt` les fichiers dans le `path_to_regions_hierarchy_file` répertoire. Ce paramètre de configuration doit contenir le chemin `regions_hierarchy.txt` fichier (la hiérarchie régionale par défaut), et les autres fichiers (`regions_hierarchy_ua.txt`) doit être situé dans le même répertoire. + +Mettre le `regions_names_*.txt` les fichiers dans le `path_to_regions_names_files` répertoire. + +Vous pouvez également créer ces fichiers vous-même. Le format de fichier est le suivant: + +`regions_hierarchy*.txt`: TabSeparated (pas d'en-tête), colonnes: + +- région de l'ID (`UInt32`) +- ID de région parent (`UInt32`) +- type de région (`UInt8`): 1-continent, 3-pays, 4-district fédéral, 5-région, 6-ville; les autres types n'ont pas de valeurs +- population (`UInt32`) — optional column + +`regions_names_*.txt`: TabSeparated (pas d'en-tête), colonnes: + +- région de l'ID (`UInt32`) +- nom de la région (`String`) — Can't contain tabs or line feeds, even escaped ones. + +Un tableau plat est utilisé pour stocker dans la RAM. Pour cette raison, les ID ne devraient pas dépasser un million. + +Les dictionnaires peuvent être mis à jour sans redémarrer le serveur. Cependant, l'ensemble des dictionnaires n'est pas mis à jour. +Pour les mises à jour, les temps de modification du fichier sont vérifiés. Si un fichier a été modifié, le dictionnaire est mis à jour. +L'intervalle de vérification des modifications est configuré dans le `builtin_dictionaries_reload_interval` paramètre. +Les mises à jour du dictionnaire (autres que le chargement lors de la première utilisation) ne bloquent pas les requêtes. Lors des mises à jour, les requêtes utilisent les anciennes versions des dictionnaires. Si une erreur se produit pendant une mise à jour, l'erreur est écrite dans le journal du serveur et les requêtes continuent d'utiliser l'ancienne version des dictionnaires. + +Nous vous recommandons de mettre à jour périodiquement les dictionnaires avec la géobase. Lors d'une mise à jour, générez de nouveaux fichiers et écrivez-les dans un emplacement séparé. Lorsque tout est prêt, renommez - les en fichiers utilisés par le serveur. + +Il existe également des fonctions pour travailler avec les identifiants du système d'exploitation et Yandex.Moteurs de recherche Metrica, mais ils ne devraient pas être utilisés. + +[Article Original](https://clickhouse.tech/docs/en/query_language/dicts/internal_dicts/) diff --git a/docs/fr/query_language/functions/arithmetic_functions.md b/docs/fr/query_language/functions/arithmetic_functions.md new file mode 100644 index 00000000000..3cb55bc1103 --- /dev/null +++ b/docs/fr/query_language/functions/arithmetic_functions.md @@ -0,0 +1,84 @@ +--- +machine_translated: true +--- + +# Fonctions arithmétiques {#arithmetic-functions} + +Pour toutes les fonctions arithmétiques, le type de résultat est calculé comme le plus petit type de nombre dans lequel le résultat correspond, s'il existe un tel type. Le minimum est pris simultanément sur la base du nombre de bits, s'il est signé, et s'il flotte. S'il n'y a pas assez de bits, le type de bits le plus élevé est pris. + +Exemple: + +``` sql +SELECT toTypeName(0), toTypeName(0 + 0), toTypeName(0 + 0 + 0), toTypeName(0 + 0 + 0 + 0) +``` + +``` text +┌─toTypeName(0)─┬─toTypeName(plus(0, 0))─┬─toTypeName(plus(plus(0, 0), 0))─┬─toTypeName(plus(plus(plus(0, 0), 0), 0))─┐ +│ UInt8 │ UInt16 │ UInt32 │ UInt64 │ +└───────────────┴────────────────────────┴─────────────────────────────────┴──────────────────────────────────────────┘ +``` + +Les fonctions arithmétiques fonctionnent pour n'importe quelle paire de types de UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64, Float32 ou Float64. + +Le débordement est produit de la même manière qu'en C++. + +## plus (A, B), opérateur a + b {#plusa-b-a-b-operator} + +Calcule la somme des nombres. +Vous pouvez également ajouter des nombres entiers avec une date ou la date et l'heure. Dans le cas d'une date, Ajouter un entier signifie ajouter le nombre de jours correspondant. Pour une date avec l'heure, cela signifie ajouter le nombre de secondes correspondant. + +## moins (A, B), opérateur a - b {#minusa-b-a-b-operator} + +Calcule la différence. Le résultat est toujours signé. + +You can also calculate integer numbers from a date or date with time. The idea is the same – see above for ‘plus’. + +## la multiplication(a, b), a \* et b \* de l'opérateur {#multiplya-b-a-b-operator} + +Calcule le produit des nombres. + +## diviser (A, B), opérateur a / b {#dividea-b-a-b-operator} + +Calcule le quotient des nombres. Le type de résultat est toujours un type à virgule flottante. +Il n'est pas de division entière. Pour la division entière, utilisez le ‘intDiv’ fonction. +En divisant par zéro vous obtenez ‘inf’, ‘-inf’, ou ‘nan’. + +## intDiv (a, b) {#intdiva-b} + +Calcule le quotient des nombres. Divise en entiers, arrondi vers le bas (par la valeur absolue). +Une exception est levée en divisant par zéro ou en divisant un nombre négatif minimal par moins un. + +## intDivOrZero(a, b) {#intdivorzeroa-b} + +Diffère de ‘intDiv’ en ce sens qu'il renvoie zéro en divisant par zéro ou en divisant un nombre négatif minimal par moins un. + +## opérateur modulo(A, B), A % B {#moduloa-b-a-b-operator} + +Calcule le reste après la division. +Si les arguments sont des nombres à virgule flottante, ils sont pré-convertis en entiers en supprimant la partie décimale. +Le reste est pris dans le même sens qu'en C++. La division tronquée est utilisée pour les nombres négatifs. +Une exception est levée en divisant par zéro ou en divisant un nombre négatif minimal par moins un. + +## moduloOrZero (a, b) {#moduloorzeroa-b} + +Diffère de ‘modulo’ en ce sens qu'il renvoie zéro lorsque le diviseur est nul. + +## annuler (a), - un opérateur {#negatea-a-operator} + +Calcule un nombre avec le signe inverse. Le résultat est toujours signé. + +## abs(un) {#arithm_func-abs} + +Calcule la valeur absolue d'un nombre (un). Autrement dit, si un \< 0, Il renvoie-A. pour les types non signés, il ne fait rien. Pour les types entiers signés, il renvoie un nombre non signé. + +## pgcd(a, b) {#gcda-b} + +Renvoie le plus grand diviseur commun des nombres. +Une exception est levée en divisant par zéro ou en divisant un nombre négatif minimal par moins un. + +## ppcm(a, b) {#lcma-b} + +Renvoie le multiple le moins commun des nombres. +Une exception est levée en divisant par zéro ou en divisant un nombre négatif minimal par moins un. + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/arithmetic_functions/) diff --git a/docs/fr/query_language/functions/array_functions.md b/docs/fr/query_language/functions/array_functions.md new file mode 100644 index 00000000000..81951e5ee62 --- /dev/null +++ b/docs/fr/query_language/functions/array_functions.md @@ -0,0 +1,1010 @@ +--- +machine_translated: true +--- + +# Fonctions pour travailler avec des tableaux {#functions-for-working-with-arrays} + +## vide {#function-empty} + +Retourne 1 pour un tableau vide, ou 0 pour un non-vide. +Le type de résultat est UInt8. +La fonction fonctionne également pour les chaînes. + +## notEmpty {#function-notempty} + +Retourne 0 pour un tableau vide, ou 1 pour un non-vide. +Le type de résultat est UInt8. +La fonction fonctionne également pour les chaînes. + +## longueur {#array_functions-length} + +Retourne le nombre d'éléments dans le tableau. +Le type de résultat est UInt64. +La fonction fonctionne également pour les chaînes. + +## emptyArrayUInt8, emptyArrayUInt16, emptyArrayUInt32, emptyArrayUInt64 {#emptyarrayuint8-emptyarrayuint16-emptyarrayuint32-emptyarrayuint64} + +## emptyArrayInt8, emptyArrayInt16, emptyArrayInt32, emptyArrayInt64 {#emptyarrayint8-emptyarrayint16-emptyarrayint32-emptyarrayint64} + +## emptyArrayFloat32, emptyArrayFloat64 {#emptyarrayfloat32-emptyarrayfloat64} + +## emptyArrayDate, emptyArrayDateTime {#emptyarraydate-emptyarraydatetime} + +## emptyArrayString {#emptyarraystring} + +Accepte zéro argument et renvoie un tableau vide du type approprié. + +## emptyArrayToSingle {#emptyarraytosingle} + +Accepte un tableau vide et renvoie un élément de tableau qui est égal à la valeur par défaut. + +## plage (fin), Plage(début, fin \[, étape\]) {#rangeend-rangestart-end-step} + +Retourne un tableau de nombres du début à la fin-1 par étape. +Si l'argument `start` n'est pas spécifié, la valeur par défaut est 0. +Si l'argument `step` n'est pas spécifié, la valeur par défaut est 1. +Il se comporte presque comme pythonic `range`. Mais la différence est que tous les types d'arguments doivent être `UInt` nombre. +Juste au cas où, une exception est levée si des tableaux d'une longueur totale de plus de 100 000 000 d'éléments sont créés dans un bloc de données. + +## array(x1, …), operator \[x1, …\] {#arrayx1-operator-x1} + +Crée un tableau à partir des arguments de la fonction. +Les arguments doivent être des constantes et avoir des types qui ont le plus petit type commun. Au moins un argument doit être passé, sinon il n'est pas clair quel type de tableau créer. Qui est, vous ne pouvez pas utiliser cette fonction pour créer un tableau vide (pour ce faire, utilisez la ‘emptyArray\*’ la fonction décrite ci-dessus). +Retourne un ‘Array(T)’ type de résultat, où ‘T’ est le plus petit type commun parmi les arguments passés. + +## arrayConcat {#arrayconcat} + +Combine des tableaux passés comme arguments. + +``` sql +arrayConcat(arrays) +``` + +**Paramètre** + +- `arrays` – Arbitrary number of arguments of [Tableau](../../data_types/array.md) type. + **Exemple** + + + +``` sql +SELECT arrayConcat([1, 2], [3, 4], [5, 6]) AS res +``` + +``` text +┌─res───────────┐ +│ [1,2,3,4,5,6] │ +└───────────────┘ +``` + +## arrayElement(arr, n), opérateur arr\[n\] {#arrayelementarr-n-operator-arrn} + +Récupérer l'élément avec l'index `n` à partir du tableau `arr`. `n` doit être n'importe quel type entier. +Les index dans un tableau commencent à partir d'un. +Les index négatifs sont pris en charge. Dans ce cas, il sélectionne l'élément correspondant numérotées à partir de la fin. Exemple, `arr[-1]` est le dernier élément du tableau. + +Si l'index est en dehors des limites d'un tableau, il renvoie une valeur (0 pour les nombres, une chaîne vide pour les cordes, etc.), sauf pour le cas avec un tableau non constant et un index constant 0 (dans ce cas, il y aura une erreur `Array indices are 1-based`). + +## a (arr, elem) {#hasarr-elem} + +Vérifie si le ‘arr’ tableau a la ‘elem’ élément. +Retourne 0 si l'élément n'est pas dans le tableau, ou 1 si elle l'est. + +`NULL` est traitée comme une valeur. + +``` sql +SELECT has([1, 2, NULL], NULL) +``` + +``` text +┌─has([1, 2, NULL], NULL)─┐ +│ 1 │ +└─────────────────────────┘ +``` + +## hasAll {#hasall} + +Vérifie si un tableau est un sous-ensemble de l'autre. + +``` sql +hasAll(set, subset) +``` + +**Paramètre** + +- `set` – Array of any type with a set of elements. +- `subset` – Array of any type with elements that should be tested to be a subset of `set`. + +**Les valeurs de retour** + +- `1`, si `set` contient tous les éléments de `subset`. +- `0`, autrement. + +**Propriétés particulières** + +- Un tableau vide est un sous-ensemble d'un tableau quelconque. +- `Null` traitée comme une valeur. +- Ordre des valeurs dans les deux tableaux n'a pas d'importance. + +**Exemple** + +`SELECT hasAll([], [])` retours 1. + +`SELECT hasAll([1, Null], [Null])` retours 1. + +`SELECT hasAll([1.0, 2, 3, 4], [1, 3])` retours 1. + +`SELECT hasAll(['a', 'b'], ['a'])` retours 1. + +`SELECT hasAll([1], ['a'])` renvoie 0. + +`SELECT hasAll([[1, 2], [3, 4]], [[1, 2], [3, 5]])` renvoie 0. + +## hasAny {#hasany} + +Vérifie si deux tableaux ont une intersection par certains éléments. + +``` sql +hasAny(array1, array2) +``` + +**Paramètre** + +- `array1` – Array of any type with a set of elements. +- `array2` – Array of any type with a set of elements. + +**Les valeurs de retour** + +- `1`, si `array1` et `array2` avoir un élément similaire au moins. +- `0`, autrement. + +**Propriétés particulières** + +- `Null` traitée comme une valeur. +- Ordre des valeurs dans les deux tableaux n'a pas d'importance. + +**Exemple** + +`SELECT hasAny([1], [])` retourner `0`. + +`SELECT hasAny([Null], [Null, 1])` retourner `1`. + +`SELECT hasAny([-128, 1., 512], [1])` retourner `1`. + +`SELECT hasAny([[1, 2], [3, 4]], ['a', 'c'])` retourner `0`. + +`SELECT hasAll([[1, 2], [3, 4]], [[1, 2], [1, 2]])` retourner `1`. + +## indexOf (arr, x) {#indexofarr-x} + +Renvoie l'index de la première ‘x’ élément (à partir de 1) s'il est dans le tableau, ou 0 s'il ne l'est pas. + +Exemple: + +``` sql +SELECT indexOf([1, 3, NULL, NULL], NULL) +``` + +``` text + +┌─indexOf([1, 3, NULL, NULL], NULL)─┐ +│ 3 │ +└───────────────────────────────────┘ +``` + +Ensemble d'éléments de `NULL` sont traités comme des valeurs normales. + +## countEqual (arr, x) {#countequalarr-x} + +Renvoie le nombre d'éléments dans le tableau égal à X. équivalent à arrayCount (elem - \> elem = x, arr). + +`NULL` les éléments sont traités comme des valeurs distinctes. + +Exemple: + +``` sql +SELECT countEqual([1, 2, NULL, NULL], NULL) +``` + +``` text +┌─countEqual([1, 2, NULL, NULL], NULL)─┐ +│ 2 │ +└──────────────────────────────────────┘ +``` + +## arrayEnumerate (arr) {#array_functions-arrayenumerate} + +Returns the array \[1, 2, 3, …, length (arr) \] + +Cette fonction est normalement utilisée avec ARRAY JOIN. Il permet de compter quelque chose une seule fois pour chaque tableau après l'application de la jointure de tableau. Exemple: + +``` sql +SELECT + count() AS Reaches, + countIf(num = 1) AS Hits +FROM test.hits +ARRAY JOIN + GoalsReached, + arrayEnumerate(GoalsReached) AS num +WHERE CounterID = 160656 +LIMIT 10 +``` + +``` text +┌─Reaches─┬──Hits─┐ +│ 95606 │ 31406 │ +└─────────┴───────┘ +``` + +Dans cet exemple, Reaches est le nombre de conversions (les chaînes reçues après l'application de la jointure de tableau), et Hits est le nombre de pages vues (chaînes avant la jointure de tableau). Dans ce cas particulier, vous pouvez obtenir le même résultat dans une voie plus facile: + +``` sql +SELECT + sum(length(GoalsReached)) AS Reaches, + count() AS Hits +FROM test.hits +WHERE (CounterID = 160656) AND notEmpty(GoalsReached) +``` + +``` text +┌─Reaches─┬──Hits─┐ +│ 95606 │ 31406 │ +└─────────┴───────┘ +``` + +Cette fonction peut également être utilisée dans les fonctions d'ordre supérieur. Par exemple, vous pouvez l'utiliser pour obtenir les indices de tableau pour les éléments qui correspondent à une condition. + +## arrayEnumerateUniq(arr, …) {#arrayenumerateuniqarr} + +Renvoie un tableau de la même taille que le tableau source, indiquant pour chaque élément Quelle est sa position parmi les éléments de même valeur. +Par exemple: arrayEnumerateUniq(\[10, 20, 10, 30\]) = \[1, 1, 2, 1\]. + +Cette fonction est utile lors de L'utilisation de la jointure de tableau et de l'agrégation d'éléments de tableau. +Exemple: + +``` sql +SELECT + Goals.ID AS GoalID, + sum(Sign) AS Reaches, + sumIf(Sign, num = 1) AS Visits +FROM test.visits +ARRAY JOIN + Goals, + arrayEnumerateUniq(Goals.ID) AS num +WHERE CounterID = 160656 +GROUP BY GoalID +ORDER BY Reaches DESC +LIMIT 10 +``` + +``` text +┌──GoalID─┬─Reaches─┬─Visits─┐ +│ 53225 │ 3214 │ 1097 │ +│ 2825062 │ 3188 │ 1097 │ +│ 56600 │ 2803 │ 488 │ +│ 1989037 │ 2401 │ 365 │ +│ 2830064 │ 2396 │ 910 │ +│ 1113562 │ 2372 │ 373 │ +│ 3270895 │ 2262 │ 812 │ +│ 1084657 │ 2262 │ 345 │ +│ 56599 │ 2260 │ 799 │ +│ 3271094 │ 2256 │ 812 │ +└─────────┴─────────┴────────┘ +``` + +Dans cet exemple, chaque ID d'objectif a un calcul du nombre de conversions (chaque élément de la structure de données imbriquées objectifs est un objectif atteint, que nous appelons une conversion) et le nombre de sessions. Sans array JOIN, nous aurions compté le nombre de sessions comme sum(signe). Mais dans ce cas particulier, les lignes ont été multipliées par la structure des objectifs imbriqués, donc pour compter chaque session une fois après cela, nous appliquons une condition à la valeur de arrayEnumerateUniq(Goals.ID) fonction. + +La fonction arrayEnumerateUniq peut prendre plusieurs tableaux de la même taille que les arguments. Dans ce cas, l'unicité est considérée pour les tuples d'éléments dans les mêmes positions dans tous les tableaux. + +``` sql +SELECT arrayEnumerateUniq([1, 1, 1, 2, 2, 2], [1, 1, 2, 1, 1, 2]) AS res +``` + +``` text +┌─res───────────┐ +│ [1,2,1,1,2,1] │ +└───────────────┘ +``` + +Ceci est nécessaire lors de L'utilisation de Array JOIN avec une structure de données imbriquée et une agrégation supplémentaire entre plusieurs éléments de cette structure. + +## arrayPopBack {#arraypopback} + +Supprime le dernier élément du tableau. + +``` sql +arrayPopBack(array) +``` + +**Paramètre** + +- `array` – Array. + +**Exemple** + +``` sql +SELECT arrayPopBack([1, 2, 3]) AS res +``` + +``` text +┌─res───┐ +│ [1,2] │ +└───────┘ +``` + +## arrayPopFront {#arraypopfront} + +Supprime le premier élément de la matrice. + +``` sql +arrayPopFront(array) +``` + +**Paramètre** + +- `array` – Array. + +**Exemple** + +``` sql +SELECT arrayPopFront([1, 2, 3]) AS res +``` + +``` text +┌─res───┐ +│ [2,3] │ +└───────┘ +``` + +## arrayPushBack {#arraypushback} + +Ajoute un élément à la fin du tableau. + +``` sql +arrayPushBack(array, single_value) +``` + +**Paramètre** + +- `array` – Array. +- `single_value` – A single value. Only numbers can be added to an array with numbers, and only strings can be added to an array of strings. When adding numbers, ClickHouse automatically sets the `single_value` type pour le type de données du tableau. Pour plus d'informations sur les types de données dans ClickHouse, voir “[Types de données](../../data_types/index.md#data_types)”. Peut être `NULL`. La fonction ajoute un `NULL` tableau, et le type d'éléments de tableau convertit en `Nullable`. + +**Exemple** + +``` sql +SELECT arrayPushBack(['a'], 'b') AS res +``` + +``` text +┌─res───────┐ +│ ['a','b'] │ +└───────────┘ +``` + +## arrayPushFront {#arraypushfront} + +Ajoute un élément au début du tableau. + +``` sql +arrayPushFront(array, single_value) +``` + +**Paramètre** + +- `array` – Array. +- `single_value` – A single value. Only numbers can be added to an array with numbers, and only strings can be added to an array of strings. When adding numbers, ClickHouse automatically sets the `single_value` type pour le type de données du tableau. Pour plus d'informations sur les types de données dans ClickHouse, voir “[Types de données](../../data_types/index.md#data_types)”. Peut être `NULL`. La fonction ajoute un `NULL` tableau, et le type d'éléments de tableau convertit en `Nullable`. + +**Exemple** + +``` sql +SELECT arrayPushFront(['b'], 'a') AS res +``` + +``` text +┌─res───────┐ +│ ['a','b'] │ +└───────────┘ +``` + +## arrayResize {#arrayresize} + +Les changements de la longueur du tableau. + +``` sql +arrayResize(array, size[, extender]) +``` + +**Paramètre:** + +- `array` — Array. +- `size` — Required length of the array. + - Si `size` est inférieure à la taille d'origine du tableau, le tableau est tronqué à partir de la droite. +- Si `size` est plus grande que la taille initiale du tableau, le tableau est étendu vers la droite avec `extender` valeurs ou valeurs par défaut pour le type de données des éléments du tableau. +- `extender` — Value for extending an array. Can be `NULL`. + +**Valeur renvoyée:** + +Un tableau de longueur `size`. + +**Exemples d'appels** + +``` sql +SELECT arrayResize([1], 3) +``` + +``` text +┌─arrayResize([1], 3)─┐ +│ [1,0,0] │ +└─────────────────────┘ +``` + +``` sql +SELECT arrayResize([1], 3, NULL) +``` + +``` text +┌─arrayResize([1], 3, NULL)─┐ +│ [1,NULL,NULL] │ +└───────────────────────────┘ +``` + +## arraySlice {#arrayslice} + +Retourne une tranche du tableau. + +``` sql +arraySlice(array, offset[, length]) +``` + +**Paramètre** + +- `array` – Array of data. +- `offset` – Indent from the edge of the array. A positive value indicates an offset on the left, and a negative value is an indent on the right. Numbering of the array items begins with 1. +- `length` - La longueur de la nécessaire tranche. Si vous spécifiez une valeur négative, la fonction renvoie un ouvert tranche `[offset, array_length - length)`. Si vous omettez la valeur, la fonction renvoie la tranche `[offset, the_end_of_array]`. + +**Exemple** + +``` sql +SELECT arraySlice([1, 2, NULL, 4, 5], 2, 3) AS res +``` + +``` text +┌─res────────┐ +│ [2,NULL,4] │ +└────────────┘ +``` + +Éléments de tableau définis sur `NULL` sont traités comme des valeurs normales. + +## arraySort(\[func,\] arr, …) {#array_functions-sort} + +Trie les éléments de la `arr` tableau dans l'ordre croissant. Si l' `func` fonction est spécifiée, l'ordre de tri est déterminé par le résultat de la `func` fonction appliquée aux éléments du tableau. Si `func` accepte plusieurs arguments, le `arraySort` la fonction est passé plusieurs tableaux que les arguments de `func` correspond à. Des exemples détaillés sont présentés à la fin de `arraySort` Description. + +Exemple de tri de valeurs entières: + +``` sql +SELECT arraySort([1, 3, 3, 0]); +``` + +``` text +┌─arraySort([1, 3, 3, 0])─┐ +│ [0,1,3,3] │ +└─────────────────────────┘ +``` + +Exemple de tri des valeurs de chaîne: + +``` sql +SELECT arraySort(['hello', 'world', '!']); +``` + +``` text +┌─arraySort(['hello', 'world', '!'])─┐ +│ ['!','hello','world'] │ +└────────────────────────────────────┘ +``` + +Considérez l'ordre de tri suivant pour le `NULL`, `NaN` et `Inf` valeur: + +``` sql +SELECT arraySort([1, nan, 2, NULL, 3, nan, -4, NULL, inf, -inf]); +``` + +``` text +┌─arraySort([1, nan, 2, NULL, 3, nan, -4, NULL, inf, -inf])─┐ +│ [-inf,-4,1,2,3,inf,nan,nan,NULL,NULL] │ +└───────────────────────────────────────────────────────────┘ +``` + +- `-Inf` les valeurs sont d'abord dans le tableau. +- `NULL` les valeurs sont les derniers dans le tableau. +- `NaN` les valeurs sont juste avant `NULL`. +- `Inf` les valeurs sont juste avant `NaN`. + +Notez que `arraySort` est un [fonction d'ordre supérieur](higher_order_functions.md). Vous pouvez passer d'une fonction lambda comme premier argument. Dans ce cas, l'ordre de classement est déterminé par le résultat de la fonction lambda appliquée aux éléments de la matrice. + +Considérons l'exemple suivant: + +``` sql +SELECT arraySort((x) -> -x, [1, 2, 3]) as res; +``` + +``` text +┌─res─────┐ +│ [3,2,1] │ +└─────────┘ +``` + +For each element of the source array, the lambda function returns the sorting key, that is, \[1 –\> -1, 2 –\> -2, 3 –\> -3\]. Since the `arraySort` fonction trie les touches dans l'ordre croissant, le résultat est \[3, 2, 1\]. Ainsi, l' `(x) –> -x` fonction lambda définit le [l'ordre décroissant](#array_functions-reverse-sort) dans un tri. + +La fonction lambda peut accepter plusieurs arguments. Dans ce cas, vous avez besoin de passer l' `arraySort` fonction plusieurs tableaux de longueur identique à laquelle correspondront les arguments de la fonction lambda. Le tableau résultant sera composé d'éléments du premier tableau d'entrée; les éléments du(des) Tableau (s) d'entrée suivant (s) spécifient les clés de tri. Exemple: + +``` sql +SELECT arraySort((x, y) -> y, ['hello', 'world'], [2, 1]) as res; +``` + +``` text +┌─res────────────────┐ +│ ['world', 'hello'] │ +└────────────────────┘ +``` + +Ici, les éléments qui sont passés dans le deuxième tableau (\[2, 1\]) définissent une clé de tri pour l'élément correspondant à partir du tableau source (\[‘hello’, ‘world’\]), qui est, \[‘hello’ –\> 2, ‘world’ –\> 1\]. Since the lambda function doesn't use `x`, les valeurs réelles du tableau source n'affectent pas l'ordre dans le résultat. Si, ‘hello’ sera le deuxième élément du résultat, et ‘world’ sera le premier. + +D'autres exemples sont présentés ci-dessous. + +``` sql +SELECT arraySort((x, y) -> y, [0, 1, 2], ['c', 'b', 'a']) as res; +``` + +``` text +┌─res─────┐ +│ [2,1,0] │ +└─────────┘ +``` + +``` sql +SELECT arraySort((x, y) -> -y, [0, 1, 2], [1, 2, 3]) as res; +``` + +``` text +┌─res─────┐ +│ [2,1,0] │ +└─────────┘ +``` + +!!! note "Note" + Pour améliorer l'efficacité du tri, de la [Transformation schwartzienne](https://en.wikipedia.org/wiki/Schwartzian_transform) est utilisée. + +## arrayReverseSort(\[func,\] arr, …) {#array_functions-reverse-sort} + +Trie les éléments de la `arr` tableau dans l'ordre décroissant. Si l' `func` la fonction est spécifiée, `arr` est trié en fonction du résultat de la `func` fonction appliquée aux éléments du tableau, puis le tableau trié est inversé. Si `func` accepte plusieurs arguments, le `arrayReverseSort` la fonction est passé plusieurs tableaux que les arguments de `func` correspond à. Des exemples détaillés sont présentés à la fin de `arrayReverseSort` Description. + +Exemple de tri de valeurs entières: + +``` sql +SELECT arrayReverseSort([1, 3, 3, 0]); +``` + +``` text +┌─arrayReverseSort([1, 3, 3, 0])─┐ +│ [3,3,1,0] │ +└────────────────────────────────┘ +``` + +Exemple de tri des valeurs de chaîne: + +``` sql +SELECT arrayReverseSort(['hello', 'world', '!']); +``` + +``` text +┌─arrayReverseSort(['hello', 'world', '!'])─┐ +│ ['world','hello','!'] │ +└───────────────────────────────────────────┘ +``` + +Considérez l'ordre de tri suivant pour le `NULL`, `NaN` et `Inf` valeur: + +``` sql +SELECT arrayReverseSort([1, nan, 2, NULL, 3, nan, -4, NULL, inf, -inf]) as res; +``` + +``` text +┌─res───────────────────────────────────┐ +│ [inf,3,2,1,-4,-inf,nan,nan,NULL,NULL] │ +└───────────────────────────────────────┘ +``` + +- `Inf` les valeurs sont d'abord dans le tableau. +- `NULL` les valeurs sont les derniers dans le tableau. +- `NaN` les valeurs sont juste avant `NULL`. +- `-Inf` les valeurs sont juste avant `NaN`. + +Notez que l' `arrayReverseSort` est un [fonction d'ordre supérieur](higher_order_functions.md). Vous pouvez passer d'une fonction lambda comme premier argument. Exemple est montré ci-dessous. + +``` sql +SELECT arrayReverseSort((x) -> -x, [1, 2, 3]) as res; +``` + +``` text +┌─res─────┐ +│ [1,2,3] │ +└─────────┘ +``` + +Le tableau est trié de la façon suivante: + +1. Dans un premier temps, le tableau source (\[1, 2, 3\]) est trié en fonction du résultat de la fonction lambda appliquée aux éléments du tableau. Le résultat est un tableau \[3, 2, 1\]. +2. Tableau qui est obtenu à l'étape précédente, est renversé. Donc, le résultat final est \[1, 2, 3\]. + +La fonction lambda peut accepter plusieurs arguments. Dans ce cas, vous avez besoin de passer l' `arrayReverseSort` fonction plusieurs tableaux de longueur identique à laquelle correspondront les arguments de la fonction lambda. Le tableau résultant sera composé d'éléments du premier tableau d'entrée; les éléments du(des) Tableau (s) d'entrée suivant (s) spécifient les clés de tri. Exemple: + +``` sql +SELECT arrayReverseSort((x, y) -> y, ['hello', 'world'], [2, 1]) as res; +``` + +``` text +┌─res───────────────┐ +│ ['hello','world'] │ +└───────────────────┘ +``` + +Dans cet exemple, le tableau est trié de la façon suivante: + +1. Au début, le tableau source (\[‘hello’, ‘world’\]) est triée selon le résultat de la fonction lambda appliquée aux éléments de tableaux. Les éléments qui sont passés dans le deuxième tableau (\[2, 1\]), définissent les clés de tri pour les éléments correspondants du tableau source. Le résultat est un tableau \[‘world’, ‘hello’\]. +2. Tableau trié lors de l'étape précédente, est renversé. Donc, le résultat final est \[‘hello’, ‘world’\]. + +D'autres exemples sont présentés ci-dessous. + +``` sql +SELECT arrayReverseSort((x, y) -> y, [4, 3, 5], ['a', 'b', 'c']) AS res; +``` + +``` text +┌─res─────┐ +│ [5,3,4] │ +└─────────┘ +``` + +``` sql +SELECT arrayReverseSort((x, y) -> -y, [4, 3, 5], [1, 2, 3]) AS res; +``` + +``` text +┌─res─────┐ +│ [4,3,5] │ +└─────────┘ +``` + +## arrayUniq(arr, …) {#arrayuniqarr} + +Si un argument est passé, il compte le nombre de différents éléments dans le tableau. +Si plusieurs arguments sont passés, il compte le nombre de tuples différents d'éléments aux positions correspondantes dans plusieurs tableaux. + +Si vous souhaitez obtenir une liste des éléments dans un tableau, vous pouvez utiliser arrayReduce(‘groupUniqArray’, arr). + +## arrayJoin (arr) {#array-functions-join} + +Une fonction spéciale. Voir la section [“ArrayJoin function”](array_join.md#functions_arrayjoin). + +## tableaudifférence {#arraydifference} + +Calcule la différence entre les éléments de tableau adjacents. Renvoie un tableau où le premier élément sera 0, le second est la différence entre `a[1] - a[0]`, etc. The type of elements in the resulting array is determined by the type inference rules for subtraction (e.g. `UInt8` - `UInt8` = `Int16`). + +**Syntaxe** + +``` sql +arrayDifference(array) +``` + +**Paramètre** + +- `array` – [Tableau](https://clickhouse.yandex/docs/en/data_types/array/). + +**Valeurs renvoyées** + +Renvoie un tableau de différences entre les éléments adjacents. + +Type: [UInt\*](https://clickhouse.yandex/docs/en/data_types/int_uint/#uint-ranges), [Int\*](https://clickhouse.yandex/docs/en/data_types/int_uint/#int-ranges), [Flottant\*](https://clickhouse.yandex/docs/en/data_types/float/). + +**Exemple** + +Requête: + +``` sql +SELECT arrayDifference([1, 2, 3, 4]) +``` + +Résultat: + +``` text +┌─arrayDifference([1, 2, 3, 4])─┐ +│ [0,1,1,1] │ +└───────────────────────────────┘ +``` + +Exemple de débordement dû au type de résultat Int64: + +Requête: + +``` sql +SELECT arrayDifference([0, 10000000000000000000]) +``` + +Résultat: + +``` text +┌─arrayDifference([0, 10000000000000000000])─┐ +│ [0,-8446744073709551616] │ +└────────────────────────────────────────────┘ +``` + +## arrayDistinct {#arraydistinct} + +Prend un tableau, retourne un tableau contenant les différents éléments seulement. + +**Syntaxe** + +``` sql +arrayDistinct(array) +``` + +**Paramètre** + +- `array` – [Tableau](https://clickhouse.yandex/docs/en/data_types/array/). + +**Valeurs renvoyées** + +Retourne un tableau contenant les éléments distincts. + +**Exemple** + +Requête: + +``` sql +SELECT arrayDistinct([1, 2, 2, 3, 1]) +``` + +Résultat: + +``` text +┌─arrayDistinct([1, 2, 2, 3, 1])─┐ +│ [1,2,3] │ +└────────────────────────────────┘ +``` + +## arrayEnumerateDense(arr) {#array_functions-arrayenumeratedense} + +Renvoie un tableau de la même taille que le tableau source, indiquant où chaque élément apparaît en premier dans le tableau source. + +Exemple: + +``` sql +SELECT arrayEnumerateDense([10, 20, 10, 30]) +``` + +``` text +┌─arrayEnumerateDense([10, 20, 10, 30])─┐ +│ [1,2,1,3] │ +└───────────────────────────────────────┘ +``` + +## arrayIntersect (arr) {#array-functions-arrayintersect} + +Prend plusieurs tableaux, retourne un tableau avec des éléments présents dans tous les tableaux source. L'ordre des éléments dans le tableau résultant est le même que dans le premier tableau. + +Exemple: + +``` sql +SELECT + arrayIntersect([1, 2], [1, 3], [2, 3]) AS no_intersect, + arrayIntersect([1, 2], [1, 3], [1, 4]) AS intersect +``` + +``` text +┌─no_intersect─┬─intersect─┐ +│ [] │ [1] │ +└──────────────┴───────────┘ +``` + +## arrayReduce(agg\_func, arr1, …) {#array-functions-arrayreduce} + +Applique une fonction d'agrégation aux éléments du tableau et renvoie son résultat. Le nom de la fonction d'agrégation est passé sous forme de chaîne entre guillemets simples `'max'`, `'sum'`. Lorsque vous utilisez des fonctions d'agrégat paramétriques, le paramètre est indiqué après le nom de la fonction entre parenthèses `'uniqUpTo(6)'`. + +Exemple: + +``` sql +SELECT arrayReduce('max', [1, 2, 3]) +``` + +``` text +┌─arrayReduce('max', [1, 2, 3])─┐ +│ 3 │ +└───────────────────────────────┘ +``` + +Si une fonction d'agrégation prend plusieurs arguments, cette fonction doit être appliqué à plusieurs ensembles de même taille. + +Exemple: + +``` sql +SELECT arrayReduce('maxIf', [3, 5], [1, 0]) +``` + +``` text +┌─arrayReduce('maxIf', [3, 5], [1, 0])─┐ +│ 3 │ +└──────────────────────────────────────┘ +``` + +Exemple avec une fonction d'agrégat paramétrique: + +``` sql +SELECT arrayReduce('uniqUpTo(3)', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) +``` + +``` text +┌─arrayReduce('uniqUpTo(3)', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])─┐ +│ 4 │ +└─────────────────────────────────────────────────────────────┘ +``` + +## arrayReverse(arr) {#array_functions-arrayreverse} + +Retourne un tableau de la même taille que l'original tableau contenant les éléments dans l'ordre inverse. + +Exemple: + +``` sql +SELECT arrayReverse([1, 2, 3]) +``` + +``` text +┌─arrayReverse([1, 2, 3])─┐ +│ [3,2,1] │ +└─────────────────────────┘ +``` + +## inverse (arr) {#array-functions-reverse} + +Synonyme de [“arrayReverse”](#array_functions-arrayreverse) + +## arrayFlatten {#arrayflatten} + +Convertit un tableau de tableaux dans un tableau associatif. + +Fonction: + +- S'applique à toute profondeur de tableaux imbriqués. +- Ne change pas les tableaux qui sont déjà plats. + +Le tableau aplati contient tous les éléments de tous les tableaux source. + +**Syntaxe** + +``` sql +flatten(array_of_arrays) +``` + +Alias: `flatten`. + +**Paramètre** + +- `array_of_arrays` — [Tableau](../../data_types/array.md) de tableaux. Exemple, `[[1,2,3], [4,5]]`. + +**Exemple** + +``` sql +SELECT flatten([[[1]], [[2], [3]]]) +``` + +``` text +┌─flatten(array(array([1]), array([2], [3])))─┐ +│ [1,2,3] │ +└─────────────────────────────────────────────┘ +``` + +## arrayCompact {#arraycompact} + +Supprime les éléments en double consécutifs d'un tableau. L'ordre des valeurs de résultat est déterminée par l'ordre dans le tableau source. + +**Syntaxe** + +``` sql +arrayCompact(arr) +``` + +**Paramètre** + +`arr` — The [tableau](../../data_types/array.md) inspecter. + +**Valeur renvoyée** + +Le tableau sans doublon. + +Type: `Array`. + +**Exemple** + +Requête: + +``` sql +SELECT arrayCompact([1, 1, nan, nan, 2, 3, 3, 3]) +``` + +Résultat: + +``` text +┌─arrayCompact([1, 1, nan, nan, 2, 3, 3, 3])─┐ +│ [1,nan,nan,2,3] │ +└────────────────────────────────────────────┘ +``` + +## arrayZip {#arrayzip} + +Combine multiple Array type columns into one Array\[Tuple(…)\] column + +**Syntaxe** + +``` sql +arrayZip(arr1, arr2, ..., arrN) +``` + +**Paramètre** + +`arr` — Any number of [tableau](../../data_types/array.md) tapez les colonnes à combiner. + +**Valeur renvoyée** + +The result of Array\[Tuple(…)\] type after the combination of these arrays + +**Exemple** + +Requête: + +``` sql +SELECT arrayZip(['a', 'b', 'c'], ['d', 'e', 'f']); +``` + +Résultat: + +``` text +┌─arrayZip(['a', 'b', 'c'], ['d', 'e', 'f'])─┐ +│ [('a','d'),('b','e'),('c','f')] │ +└────────────────────────────────────────────┘ +``` + +## arrayAUC {#arrayauc} + +Calculer AUC (zone sous la courbe, qui est un concept dans l'apprentissage automatique, voir plus de détails: https://en.wikipedia.org/wiki/Receiver\_operating\_characteristic\#Area\_under\_the\_curve). + +**Syntaxe** + +``` sql +arrayAUC(arr_scores, arr_labels) +``` + +**Paramètre** +- `arr_scores` — scores prediction model gives. +- `arr_labels` — labels of samples, usually 1 for positive sample and 0 for negtive sample. + +**Valeur renvoyée** +Renvoie la valeur AUC avec le type Float64. + +**Exemple** +Requête: + +``` sql +select arrayAUC([0.1, 0.4, 0.35, 0.8], [0, 0, 1, 1]) +``` + +Résultat: + +``` text +┌─arrayAUC([0.1, 0.4, 0.35, 0.8], [0, 0, 1, 1])─┐ +│ 0.75 │ +└────────────────────────────────────────-----──┘ +``` + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/array_functions/) diff --git a/docs/fr/query_language/functions/array_join.md b/docs/fr/query_language/functions/array_join.md new file mode 100644 index 00000000000..1985191b319 --- /dev/null +++ b/docs/fr/query_language/functions/array_join.md @@ -0,0 +1,34 @@ +--- +machine_translated: true +--- + +# fonction arrayJoin {#functions_arrayjoin} + +C'est un très inhabituelle de la fonction. + +Les fonctions normales ne modifient pas un ensemble de lignes, mais modifient simplement les valeurs de chaque ligne (map). +Les fonctions d'agrégation compriment un ensemble de lignes (plier ou réduire). +Le ‘arrayJoin’ la fonction prend chaque ligne et génère un ensemble de lignes (dépliante). + +Cette fonction prend un tableau comme argument et propage la ligne source à plusieurs lignes pour le nombre d'éléments dans le tableau. +Toutes les valeurs des colonnes sont simplement copiés, sauf les valeurs dans la colonne où cette fonction est appliquée; elle est remplacée par la valeur correspondante de tableau. + +Une requête peut utiliser plusieurs `arrayJoin` fonction. Dans ce cas, la transformation est effectuée plusieurs fois. + +Notez la syntaxe de jointure de tableau dans la requête SELECT, qui offre des possibilités plus larges. + +Exemple: + +``` sql +SELECT arrayJoin([1, 2, 3] AS src) AS dst, 'Hello', src +``` + +``` text +┌─dst─┬─\'Hello\'─┬─src─────┐ +│ 1 │ Hello │ [1,2,3] │ +│ 2 │ Hello │ [1,2,3] │ +│ 3 │ Hello │ [1,2,3] │ +└─────┴───────────┴─────────┘ +``` + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/array_join/) diff --git a/docs/fr/query_language/functions/bit_functions.md b/docs/fr/query_language/functions/bit_functions.md new file mode 100644 index 00000000000..c04c0a77cf7 --- /dev/null +++ b/docs/fr/query_language/functions/bit_functions.md @@ -0,0 +1,252 @@ +--- +machine_translated: true +--- + +# Peu de fonctions {#bit-functions} + +Les fonctions Bit fonctionnent pour n'importe quelle paire de types de UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64, Float32 ou Float64. + +Le type de résultat est un entier avec des bits égaux aux bits maximum de ses arguments. Si au moins l'un des arguments est signé, le résultat est un signé nombre. Si un argument est un nombre à virgule flottante, Il est converti en Int64. + +## bitAnd (a, b) {#bitanda-b} + +## bitOr (a, b) {#bitora-b} + +## bitXor (a, b) {#bitxora-b} + +## bitNot (a) {#bitnota} + +## bitShiftLeft (A, b) {#bitshiftlefta-b} + +## bitShiftRight (A, b) {#bitshiftrighta-b} + +## bitRotateLeft (a, b) {#bitrotatelefta-b} + +## bitRotateRight (a, b) {#bitrotaterighta-b} + +## bitTest {#bittest} + +Prend tout entier et le convertit en [forme binaire](https://en.wikipedia.org/wiki/Binary_number) renvoie la valeur d'un bit à la position spécifiée. Le compte à rebours commence à partir de 0 de la droite vers la gauche. + +**Syntaxe** + +``` sql +SELECT bitTest(number, index) +``` + +**Paramètre** + +- `number` – integer number. +- `index` – position of bit. + +**Valeurs renvoyées** + +Renvoie une valeur de bit à la position spécifiée. + +Type: `UInt8`. + +**Exemple** + +Par exemple, le nombre 43 dans le système numérique de base-2 (binaire) est 101011. + +Requête: + +``` sql +SELECT bitTest(43, 1) +``` + +Résultat: + +``` text +┌─bitTest(43, 1)─┐ +│ 1 │ +└────────────────┘ +``` + +Un autre exemple: + +Requête: + +``` sql +SELECT bitTest(43, 2) +``` + +Résultat: + +``` text +┌─bitTest(43, 2)─┐ +│ 0 │ +└────────────────┘ +``` + +## bitTestAll {#bittestall} + +Renvoie le résultat de [logique de conjonction](https://en.wikipedia.org/wiki/Logical_conjunction) (Et opérateur) de tous les bits à des positions données. Le compte à rebours commence à partir de 0 de la droite vers la gauche. + +La conjonction pour les opérations bit à bit: + +0 AND 0 = 0 + +0 AND 1 = 0 + +1 AND 0 = 0 + +1 AND 1 = 1 + +**Syntaxe** + +``` sql +SELECT bitTestAll(number, index1, index2, index3, index4, ...) +``` + +**Paramètre** + +- `number` – integer number. +- `index1`, `index2`, `index3`, `index4` – positions of bit. For example, for set of positions (`index1`, `index2`, `index3`, `index4`) est vrai si et seulement si toutes ses positions sont remplies (`index1` ⋀ `index2`, ⋀ `index3` ⋀ `index4`). + +**Valeurs renvoyées** + +Retourne le résultat de la conjonction logique. + +Type: `UInt8`. + +**Exemple** + +Par exemple, le nombre 43 dans le système numérique de base-2 (binaire) est 101011. + +Requête: + +``` sql +SELECT bitTestAll(43, 0, 1, 3, 5) +``` + +Résultat: + +``` text +┌─bitTestAll(43, 0, 1, 3, 5)─┐ +│ 1 │ +└────────────────────────────┘ +``` + +Un autre exemple: + +Requête: + +``` sql +SELECT bitTestAll(43, 0, 1, 3, 5, 2) +``` + +Résultat: + +``` text +┌─bitTestAll(43, 0, 1, 3, 5, 2)─┐ +│ 0 │ +└───────────────────────────────┘ +``` + +## bitTestAny {#bittestany} + +Renvoie le résultat de [disjonction logique](https://en.wikipedia.org/wiki/Logical_disjunction) (Ou opérateur) de tous les bits à des positions données. Le compte à rebours commence à partir de 0 de la droite vers la gauche. + +La disjonction pour les opérations binaires: + +0 OR 0 = 0 + +0 OR 1 = 1 + +1 OR 0 = 1 + +1 OR 1 = 1 + +**Syntaxe** + +``` sql +SELECT bitTestAny(number, index1, index2, index3, index4, ...) +``` + +**Paramètre** + +- `number` – integer number. +- `index1`, `index2`, `index3`, `index4` – positions of bit. + +**Valeurs renvoyées** + +Renvoie le résultat de la disjuction logique. + +Type: `UInt8`. + +**Exemple** + +Par exemple, le nombre 43 dans le système numérique de base-2 (binaire) est 101011. + +Requête: + +``` sql +SELECT bitTestAny(43, 0, 2) +``` + +Résultat: + +``` text +┌─bitTestAny(43, 0, 2)─┐ +│ 1 │ +└──────────────────────┘ +``` + +Un autre exemple: + +Requête: + +``` sql +SELECT bitTestAny(43, 4, 2) +``` + +Résultat: + +``` text +┌─bitTestAny(43, 4, 2)─┐ +│ 0 │ +└──────────────────────┘ +``` + +## bitCount {#bitcount} + +Calcule le nombre de bits mis à un dans la représentation binaire d'un nombre. + +**Syntaxe** + +``` sql +bitCount(x) +``` + +**Paramètre** + +- `x` — [Entier](../../data_types/int_uint.md) ou [virgule flottante](../../data_types/float.md) nombre. La fonction utilise la représentation de la valeur en mémoire. Il permet de financer les nombres à virgule flottante. + +**Valeur renvoyée** + +- Nombre de bits défini sur un dans le numéro d'entrée. + +La fonction ne convertit pas la valeur d'entrée en un type plus grand ([l'extension du signe](https://en.wikipedia.org/wiki/Sign_extension)). Ainsi, par exemple, `bitCount(toUInt8(-1)) = 8`. + +Type: `UInt8`. + +**Exemple** + +Prenez par exemple le numéro 333. Sa représentation binaire: 0000000101001101. + +Requête: + +``` sql +SELECT bitCount(333) +``` + +Résultat: + +``` text +┌─bitCount(333)─┐ +│ 5 │ +└───────────────┘ +``` + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/bit_functions/) diff --git a/docs/fr/query_language/functions/bitmap_functions.md b/docs/fr/query_language/functions/bitmap_functions.md new file mode 100644 index 00000000000..38d3c17211e --- /dev/null +++ b/docs/fr/query_language/functions/bitmap_functions.md @@ -0,0 +1,493 @@ +--- +machine_translated: true +--- + +# Fonctions de Bitmap {#bitmap-functions} + +Les fonctions Bitmap fonctionnent pour le calcul de la valeur de L'objet de deux bitmaps, il s'agit de renvoyer un nouveau bitmap ou une cardinalité tout en utilisant le calcul de la formule, tel que and, or, xor, and not, etc. + +Il existe 2 types de méthodes de construction pour L'objet Bitmap. L'un doit être construit par la fonction d'agrégation groupBitmap avec-State, l'autre doit être construit par L'objet Array. Il est également de convertir L'objet Bitmap en objet tableau. + +RoaringBitmap est enveloppé dans une structure de données pendant le stockage réel des objets Bitmap. Lorsque la cardinalité est inférieure ou égale à 32, elle utilise Set objet. Lorsque la cardinalité est supérieure à 32, elle utilise l'objet RoaringBitmap. C'est pourquoi le stockage de faible cardinalité jeu est plus rapide. + +Pour plus d'informations sur RoaringBitmap, voir: [CRoaring](https://github.com/RoaringBitmap/CRoaring). + +## bitmapBuild {#bitmap_functions-bitmapbuild} + +Construire un bitmap à partir d'un tableau entier non signé. + +``` sql +bitmapBuild(array) +``` + +**Paramètre** + +- `array` – unsigned integer array. + +**Exemple** + +``` sql +SELECT bitmapBuild([1, 2, 3, 4, 5]) AS res, toTypeName(res) +``` + +``` text +┌─res─┬─toTypeName(bitmapBuild([1, 2, 3, 4, 5]))─────┐ +│  │ AggregateFunction(groupBitmap, UInt8) │ +└─────┴──────────────────────────────────────────────┘ +``` + +## bitmapToArray {#bitmaptoarray} + +Convertir bitmap en tableau entier. + +``` sql +bitmapToArray(bitmap) +``` + +**Paramètre** + +- `bitmap` – bitmap object. + +**Exemple** + +``` sql +SELECT bitmapToArray(bitmapBuild([1, 2, 3, 4, 5])) AS res +``` + +``` text +┌─res─────────┐ +│ [1,2,3,4,5] │ +└─────────────┘ +``` + +## bitmapSubsetInRange {#bitmap-functions-bitmapsubsetinrange} + +Retourne le sous-ensemble dans la plage spécifiée (n'inclut pas le range\_end). + +``` sql +bitmapSubsetInRange(bitmap, range_start, range_end) +``` + +**Paramètre** + +- `bitmap` – [Objet Bitmap](#bitmap_functions-bitmapbuild). +- `range_start` – range start point. Type: [UInt32](../../data_types/int_uint.md). +- `range_end` – range end point(excluded). Type: [UInt32](../../data_types/int_uint.md). + +**Exemple** + +``` sql +SELECT bitmapToArray(bitmapSubsetInRange(bitmapBuild([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,100,200,500]), toUInt32(30), toUInt32(200))) AS res +``` + +``` text +┌─res───────────────┐ +│ [30,31,32,33,100] │ +└───────────────────┘ +``` + +## bitmapSubsetLimit {#bitmapsubsetlimit} + +Crée un sous-ensemble de bitmap avec n éléments pris entre `range_start` et `cardinality_limit`. + +**Syntaxe** + +``` sql +bitmapSubsetLimit(bitmap, range_start, cardinality_limit) +``` + +**Paramètre** + +- `bitmap` – [Objet Bitmap](#bitmap_functions-bitmapbuild). +- `range_start` – The subset starting point. Type: [UInt32](../../data_types/int_uint.md). +- `cardinality_limit` – The subset cardinality upper limit. Type: [UInt32](../../data_types/int_uint.md). + +**Valeur renvoyée** + +Ensemble. + +Type: `Bitmap object`. + +**Exemple** + +Requête: + +``` sql +SELECT bitmapToArray(bitmapSubsetLimit(bitmapBuild([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,100,200,500]), toUInt32(30), toUInt32(200))) AS res +``` + +Résultat: + +``` text +┌─res───────────────────────┐ +│ [30,31,32,33,100,200,500] │ +└───────────────────────────┘ +``` + +## bitmapContains {#bitmap_functions-bitmapcontains} + +Vérifie si le bitmap contient un élément. + +``` sql +bitmapContains(haystack, needle) +``` + +**Paramètre** + +- `haystack` – [Objet Bitmap](#bitmap_functions-bitmapbuild) où la fonction recherche. +- `needle` – Value that the function searches. Type: [UInt32](../../data_types/int_uint.md). + +**Valeurs renvoyées** + +- 0 — If `haystack` ne contient pas de `needle`. +- 1 — If `haystack` contenir `needle`. + +Type: `UInt8`. + +**Exemple** + +``` sql +SELECT bitmapContains(bitmapBuild([1,5,7,9]), toUInt32(9)) AS res +``` + +``` text +┌─res─┐ +│ 1 │ +└─────┘ +``` + +## bitmapHasAny {#bitmaphasany} + +Vérifie si deux bitmaps ont une intersection par certains éléments. + +``` sql +bitmapHasAny(bitmap1, bitmap2) +``` + +Si vous êtes sûr que `bitmap2` contient strictement un élément, envisagez d'utiliser le [bitmapContains](#bitmap_functions-bitmapcontains) fonction. Cela fonctionne plus efficacement. + +**Paramètre** + +- `bitmap*` – bitmap object. + +**Les valeurs de retour** + +- `1`, si `bitmap1` et `bitmap2` avoir un élément similaire au moins. +- `0`, autrement. + +**Exemple** + +``` sql +SELECT bitmapHasAny(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res +``` + +``` text +┌─res─┐ +│ 1 │ +└─────┘ +``` + +## bitmapHasAll {#bitmaphasall} + +Analogue à `hasAll(array, array)` renvoie 1 si le premier bitmap contient tous les éléments du second, 0 sinon. +Si le deuxième argument est un bitmap vide, alors renvoie 1. + +``` sql +bitmapHasAll(bitmap,bitmap) +``` + +**Paramètre** + +- `bitmap` – bitmap object. + +**Exemple** + +``` sql +SELECT bitmapHasAll(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res +``` + +``` text +┌─res─┐ +│ 0 │ +└─────┘ +``` + +## bitmapCardinality {#bitmapcardinality} + +Retrun bitmap cardinalité de type UInt64. + +``` sql +bitmapCardinality(bitmap) +``` + +**Paramètre** + +- `bitmap` – bitmap object. + +**Exemple** + +``` sql +SELECT bitmapCardinality(bitmapBuild([1, 2, 3, 4, 5])) AS res +``` + +``` text +┌─res─┐ +│ 5 │ +└─────┘ +``` + +## bitmapMin {#bitmapmin} + +Retrun la plus petite valeur de type UInt64 dans l'ensemble, UINT32\_MAX si l'ensemble est vide. + + bitmapMin(bitmap) + +**Paramètre** + +- `bitmap` – bitmap object. + +**Exemple** + +``` sql +SELECT bitmapMin(bitmapBuild([1, 2, 3, 4, 5])) AS res +``` + + ┌─res─┐ + │ 1 │ + └─────┘ + +## bitmapMax {#bitmapmax} + +Retrun la plus grande valeur de type UInt64 dans l'ensemble, 0 si l'ensemble est vide. + + bitmapMax(bitmap) + +**Paramètre** + +- `bitmap` – bitmap object. + +**Exemple** + +``` sql +SELECT bitmapMax(bitmapBuild([1, 2, 3, 4, 5])) AS res +``` + + ┌─res─┐ + │ 5 │ + └─────┘ + +## bitmapTransform {#bitmaptransform} + +Transformer un tableau de valeurs d'une image à l'autre tableau de valeurs, le résultat est une nouvelle image. + + bitmapTransform(bitmap, from_array, to_array) + +**Paramètre** + +- `bitmap` – bitmap object. +- `from_array` – UInt32 array. For idx in range \[0, from\_array.size()), if bitmap contains from\_array\[idx\], then replace it with to\_array\[idx\]. Note that the result depends on array ordering if there are common elements between from\_array and to\_array. +- `to_array` – UInt32 array, its size shall be the same to from\_array. + +**Exemple** + +``` sql +SELECT bitmapToArray(bitmapTransform(bitmapBuild([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), cast([5,999,2] as Array(UInt32)), cast([2,888,20] as Array(UInt32)))) AS res +``` + + ┌─res───────────────────┐ + │ [1,3,4,6,7,8,9,10,20] │ + └───────────────────────┘ + +## bitmapAnd {#bitmapand} + +Deux bitmap et calcul, le résultat est un nouveau bitmap. + +``` sql +bitmapAnd(bitmap,bitmap) +``` + +**Paramètre** + +- `bitmap` – bitmap object. + +**Exemple** + +``` sql +SELECT bitmapToArray(bitmapAnd(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res +``` + +``` text +┌─res─┐ +│ [3] │ +└─────┘ +``` + +## bitmapOr {#bitmapor} + +Deux bitmap ou calcul, le résultat est un nouveau bitmap. + +``` sql +bitmapOr(bitmap,bitmap) +``` + +**Paramètre** + +- `bitmap` – bitmap object. + +**Exemple** + +``` sql +SELECT bitmapToArray(bitmapOr(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res +``` + +``` text +┌─res─────────┐ +│ [1,2,3,4,5] │ +└─────────────┘ +``` + +## bitmapXor {#bitmapxor} + +Deux bitmap xor calcul, le résultat est une nouvelle image. + +``` sql +bitmapXor(bitmap,bitmap) +``` + +**Paramètre** + +- `bitmap` – bitmap object. + +**Exemple** + +``` sql +SELECT bitmapToArray(bitmapXor(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res +``` + +``` text +┌─res───────┐ +│ [1,2,4,5] │ +└───────────┘ +``` + +## bitmapetnot {#bitmapandnot} + +Deux Bitmap andnot calcul, le résultat est un nouveau bitmap. + +``` sql +bitmapAndnot(bitmap,bitmap) +``` + +**Paramètre** + +- `bitmap` – bitmap object. + +**Exemple** + +``` sql +SELECT bitmapToArray(bitmapAndnot(bitmapBuild([1,2,3]),bitmapBuild([3,4,5]))) AS res +``` + +``` text +┌─res───┐ +│ [1,2] │ +└───────┘ +``` + +## bitmapetcardinalité {#bitmapandcardinality} + +Deux bitmap et calcul, retour cardinalité de type UInt64. + +``` sql +bitmapAndCardinality(bitmap,bitmap) +``` + +**Paramètre** + +- `bitmap` – bitmap object. + +**Exemple** + +``` sql +SELECT bitmapAndCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res; +``` + +``` text +┌─res─┐ +│ 1 │ +└─────┘ +``` + +## bitmapOrCardinality {#bitmaporcardinality} + +Deux bitmap ou calcul, retour cardinalité de type UInt64. + +``` sql +bitmapOrCardinality(bitmap,bitmap) +``` + +**Paramètre** + +- `bitmap` – bitmap object. + +**Exemple** + +``` sql +SELECT bitmapOrCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res; +``` + +``` text +┌─res─┐ +│ 5 │ +└─────┘ +``` + +## bitmapXorCardinality {#bitmapxorcardinality} + +Deux bitmap XOR calcul, retour cardinalité de type UInt64. + +``` sql +bitmapXorCardinality(bitmap,bitmap) +``` + +**Paramètre** + +- `bitmap` – bitmap object. + +**Exemple** + +``` sql +SELECT bitmapXorCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res; +``` + +``` text +┌─res─┐ +│ 4 │ +└─────┘ +``` + +## bitmapetnotcardinality {#bitmapandnotcardinality} + +Deux bitmap andnot calcul, retour cardinalité de type UInt64. + +``` sql +bitmapAndnotCardinality(bitmap,bitmap) +``` + +**Paramètre** + +- `bitmap` – bitmap object. + +**Exemple** + +``` sql +SELECT bitmapAndnotCardinality(bitmapBuild([1,2,3]),bitmapBuild([3,4,5])) AS res; +``` + +``` text +┌─res─┐ +│ 2 │ +└─────┘ +``` + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/bitmap_functions/) diff --git a/docs/fr/query_language/functions/comparison_functions.md b/docs/fr/query_language/functions/comparison_functions.md new file mode 100644 index 00000000000..50477b89596 --- /dev/null +++ b/docs/fr/query_language/functions/comparison_functions.md @@ -0,0 +1,36 @@ +--- +machine_translated: true +--- + +# Fonctions de comparaison {#comparison-functions} + +Les fonctions de comparaison renvoient toujours 0 ou 1 (Uint8). + +Les types suivants peuvent être comparés: + +- nombre +- cordes et cordes fixes +- date +- dates avec heures + +au sein de chaque groupe, mais pas entre différents groupes. + +Par exemple, vous ne pouvez pas comparer une date avec une chaîne. Vous devez utiliser une fonction pour convertir la chaîne en une date, ou vice versa. + +Les chaînes sont comparées par octets. Une courte chaîne est plus petite que toutes les chaînes qui commencent par elle et qui contiennent au moins un caractère de plus. + +Note. Jusqu'à la version 1.1.54134, les numéros signés et non signés étaient comparés de la même manière qu'en C++. En d'autres termes, vous pourriez obtenir un résultat incorrect dans des cas comme SELECT 9223372036854775807 \> -1. Ce comportement a changé dans la version 1.1.54134 et est maintenant mathématiquement correct. + +## égal, A = B et a = = b opérateur {#function-equals} + +## notEquals, a ! opérateur= b et a `<>` b {#function-notequals} + +## peu, `< operator` {#function-less} + +## grand, `> operator` {#function-greater} + +## lessOrEquals, `<= operator` {#function-lessorequals} + +## greaterOrEquals, `>= operator` {#function-greaterorequals} + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/comparison_functions/) diff --git a/docs/fr/query_language/functions/conditional_functions.md b/docs/fr/query_language/functions/conditional_functions.md new file mode 100644 index 00000000000..18c2c5ef081 --- /dev/null +++ b/docs/fr/query_language/functions/conditional_functions.md @@ -0,0 +1,204 @@ +--- +machine_translated: true +--- + +# Fonctions conditionnelles {#conditional-functions} + +## si {#if} + +Contrôle la ramification conditionnelle. Contrairement à la plupart des systèmes, ClickHouse évalue toujours les deux expressions `then` et `else`. + +**Syntaxe** + +``` sql +SELECT if(cond, then, else) +``` + +Si la condition `cond` renvoie une valeur non nulle, retourne le résultat de l'expression `then` et le résultat de l'expression `else`, si présent, est ignoré. Si l' `cond` est égal à zéro ou `NULL` alors le résultat de la `then` l'expression est ignorée et le résultat de `else` expression, si elle est présente, est renvoyée. + +**Paramètre** + +- `cond` – The condition for evaluation that can be zero or not. The type is UInt8, Nullable(UInt8) or NULL. +- `then` - L'expression à renvoyer si la condition est remplie. +- `else` - L'expression à renvoyer si la condition n'est pas remplie. + +**Valeurs renvoyées** + +La fonction s'exécute `then` et `else` expressions et retourne son résultat, selon que la condition `cond` fini par être zéro ou pas. + +**Exemple** + +Requête: + +``` sql +SELECT if(1, plus(2, 2), plus(2, 6)) +``` + +Résultat: + +``` text +┌─plus(2, 2)─┐ +│ 4 │ +└────────────┘ +``` + +Requête: + +``` sql +SELECT if(0, plus(2, 2), plus(2, 6)) +``` + +Résultat: + +``` text +┌─plus(2, 6)─┐ +│ 8 │ +└────────────┘ +``` + +- `then` et `else` doit avoir le type commun le plus bas. + +**Exemple:** + +Prendre cette `LEFT_RIGHT` table: + +``` sql +SELECT * +FROM LEFT_RIGHT + +┌─left─┬─right─┐ +│ ᴺᵁᴸᴸ │ 4 │ +│ 1 │ 3 │ +│ 2 │ 2 │ +│ 3 │ 1 │ +│ 4 │ ᴺᵁᴸᴸ │ +└──────┴───────┘ +``` + +La requête suivante compare `left` et `right` valeur: + +``` sql +SELECT + left, + right, + if(left < right, 'left is smaller than right', 'right is greater or equal than left') AS is_smaller +FROM LEFT_RIGHT +WHERE isNotNull(left) AND isNotNull(right) + +┌─left─┬─right─┬─is_smaller──────────────────────────┐ +│ 1 │ 3 │ left is smaller than right │ +│ 2 │ 2 │ right is greater or equal than left │ +│ 3 │ 1 │ right is greater or equal than left │ +└──────┴───────┴─────────────────────────────────────┘ +``` + +Note: `NULL` les valeurs ne sont pas utilisés dans cet exemple, vérifier [Valeurs nulles dans les conditions](#null-values-in-conditionals) section. + +## Opérateur Ternaire {#ternary-operator} + +Il fonctionne même comme `if` fonction. + +Syntaxe: `cond ? then : else` + +Retourner `then` si l' `cond` renvoie la valeur vrai (supérieur à zéro), sinon renvoie `else`. + +- `cond` doit être de type de `UInt8`, et `then` et `else` doit avoir le type commun le plus bas. + +- `then` et `else` peut être `NULL` + +**Voir aussi** + +- [ifNotFinite](other_functions.md#ifnotfinite). + +## multiIf {#multiif} + +Permet d'écrire le [CASE](../operators.md#operator_case) opérateur plus compacte dans la requête. + +Syntaxe: `multiIf(cond_1, then_1, cond_2, then_2, ..., else)` + +**Paramètre:** + +- `cond_N` — The condition for the function to return `then_N`. +- `then_N` — The result of the function when executed. +- `else` — The result of the function if none of the conditions is met. + +La fonction accepte `2N+1` paramètre. + +**Valeurs renvoyées** + +La fonction renvoie l'une des valeurs `then_N` ou `else` selon les conditions `cond_N`. + +**Exemple** + +En utilisant à nouveau `LEFT_RIGHT` table. + +``` sql +SELECT + left, + right, + multiIf(left < right, 'left is smaller', left > right, 'left is greater', left = right, 'Both equal', 'Null value') AS result +FROM LEFT_RIGHT + +┌─left─┬─right─┬─result──────────┐ +│ ᴺᵁᴸᴸ │ 4 │ Null value │ +│ 1 │ 3 │ left is smaller │ +│ 2 │ 2 │ Both equal │ +│ 3 │ 1 │ left is greater │ +│ 4 │ ᴺᵁᴸᴸ │ Null value │ +└──────┴───────┴─────────────────┘ +``` + +## Utilisation directe des résultats conditionnels {#using-conditional-results-directly} + +Les conditions entraînent toujours `0`, `1` ou `NULL`. Vous pouvez donc utiliser des résultats conditionnels directement comme ceci: + +``` sql +SELECT left < right AS is_small +FROM LEFT_RIGHT + +┌─is_small─┐ +│ ᴺᵁᴸᴸ │ +│ 1 │ +│ 0 │ +│ 0 │ +│ ᴺᵁᴸᴸ │ +└──────────┘ +``` + +## Valeurs nulles dans les conditions {#null-values-in-conditionals} + +Lorsque `NULL` les valeurs sont impliqués dans des conditions, le résultat sera également `NULL`. + +``` sql +SELECT + NULL < 1, + 2 < NULL, + NULL < NULL, + NULL = NULL + +┌─less(NULL, 1)─┬─less(2, NULL)─┬─less(NULL, NULL)─┬─equals(NULL, NULL)─┐ +│ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ +└───────────────┴───────────────┴──────────────────┴────────────────────┘ +``` + +Donc, vous devriez construire vos requêtes avec soin si les types sont `Nullable`. + +L'exemple suivant le démontre en omettant d'ajouter la condition égale à `multiIf`. + +``` sql +SELECT + left, + right, + multiIf(left < right, 'left is smaller', left > right, 'right is smaller', 'Both equal') AS faulty_result +FROM LEFT_RIGHT + +┌─left─┬─right─┬─faulty_result────┐ +│ ᴺᵁᴸᴸ │ 4 │ Both equal │ +│ 1 │ 3 │ left is smaller │ +│ 2 │ 2 │ Both equal │ +│ 3 │ 1 │ right is smaller │ +│ 4 │ ᴺᵁᴸᴸ │ Both equal │ +└──────┴───────┴──────────────────┘ +``` + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/conditional_functions/) diff --git a/docs/fr/query_language/functions/date_time_functions.md b/docs/fr/query_language/functions/date_time_functions.md new file mode 100644 index 00000000000..be36b0477f7 --- /dev/null +++ b/docs/fr/query_language/functions/date_time_functions.md @@ -0,0 +1,447 @@ +--- +machine_translated: true +--- + +# Fonctions pour travailler avec des dates et des heures {#functions-for-working-with-dates-and-times} + +Support des fuseaux horaires + +Toutes les fonctions pour travailler avec la date et l'heure qui ont une logique d'utilisation pour le fuseau horaire peut accepter un second fuseau horaire argument. Exemple: Asie / Ekaterinbourg. Dans ce cas, ils utilisent le fuseau horaire spécifié au lieu du fuseau horaire local (par défaut). + +``` sql +SELECT + toDateTime('2016-06-15 23:00:00') AS time, + toDate(time) AS date_local, + toDate(time, 'Asia/Yekaterinburg') AS date_yekat, + toString(time, 'US/Samoa') AS time_samoa +``` + +``` text +┌────────────────time─┬─date_local─┬─date_yekat─┬─time_samoa──────────┐ +│ 2016-06-15 23:00:00 │ 2016-06-15 │ 2016-06-16 │ 2016-06-15 09:00:00 │ +└─────────────────────┴────────────┴────────────┴─────────────────────┘ +``` + +Seuls les fuseaux horaires qui diffèrent de L'UTC par un nombre entier d'heures sont pris en charge. + +## toTimeZone {#totimezone} + +Convertir l'heure ou la date et de l'heure au fuseau horaire spécifié. + +## toYear {#toyear} + +Convertit une date ou une date avec l'heure en un numéro UInt16 contenant le numéro d'année (AD). + +## toQuarter {#toquarter} + +Convertit une date ou une date avec l'heure en un numéro UInt8 contenant le numéro de trimestre. + +## toMonth {#tomonth} + +Convertit une date ou une date avec l'heure en un numéro UInt8 contenant le numéro de mois (1-12). + +## toDayOfYear {#todayofyear} + +Convertit une date ou une date avec l'heure en un numéro UInt16 contenant le numéro du jour de l'année (1-366). + +## toDayOfMonth {#todayofmonth} + +Convertit une date ou une date avec le temps à un UInt8 contenant le numéro du jour du mois (1-31). + +## toDayOfWeek {#todayofweek} + +Convertit une date ou une date avec l'heure en un numéro UInt8 contenant le numéro du jour de la semaine (lundi est 1, et dimanche est 7). + +## toHour {#tohour} + +Convertit une date avec l'heure en un nombre UInt8 contenant le numéro de l'heure dans l'Heure de 24 heures (0-23). +This function assumes that if clocks are moved ahead, it is by one hour and occurs at 2 a.m., and if clocks are moved back, it is by one hour and occurs at 3 a.m. (which is not always true – even in Moscow the clocks were twice changed at a different time). + +## toMinute {#tominute} + +Convertit une date avec l'heure en un numéro UInt8 contenant le numéro de la minute de l'heure (0-59). + +## toseconde {#tosecond} + +Convertit une date avec l'heure en un nombre UInt8 contenant le numéro de la seconde dans la minute (0-59). +Les secondes intercalaires ne sont pas comptabilisés. + +## toUnixTimestamp {#to-unix-timestamp} + +Pour L'argument DateTime: convertit la valeur en sa représentation numérique interne (horodatage Unix). +For String argument: analyse datetime from string en fonction du fuseau horaire (second argument optionnel, le fuseau horaire du serveur est utilisé par défaut) et renvoie l'horodatage unix correspondant. +Pour L'argument Date: le comportement n'est pas spécifié. + +**Syntaxe** + +``` sql +toUnixTimestamp(datetime) +toUnixTimestamp(str, [timezone]) +``` + +**Valeur renvoyée** + +- Renvoie l'horodatage unix. + +Type: `UInt32`. + +**Exemple** + +Requête: + +``` sql +SELECT toUnixTimestamp('2017-11-05 08:07:47', 'Asia/Tokyo') AS unix_timestamp +``` + +Résultat: + +``` text +┌─unix_timestamp─┐ +│ 1509836867 │ +└────────────────┘ +``` + +## toStartOfYear {#tostartofyear} + +Arrondit une date ou une date avec l'heure jusqu'au premier jour de l'année. +Renvoie la date. + +## toStartOfISOYear {#tostartofisoyear} + +Arrondit une date ou une date avec l'heure jusqu'au premier jour de L'année ISO. +Renvoie la date. + +## toStartOfQuarter {#tostartofquarter} + +Arrondit une date ou une date avec l'heure jusqu'au premier jour du trimestre. +Le premier jour du trimestre, soit le 1er janvier, 1er avril, 1er juillet ou 1er octobre. +Renvoie la date. + +## toStartOfMonth {#tostartofmonth} + +Arrondit une date ou une date avec l'heure jusqu'au premier jour du mois. +Renvoie la date. + +!!! attention "Attention" + Le comportement de l'analyse des dates incorrectes est spécifique à l'implémentation. ClickHouse peut renvoyer la date zéro, lancer une exception ou faire “natural” débordement. + +## toMonday {#tomonday} + +Arrondit une date ou une date avec l'heure au lundi le plus proche. +Renvoie la date. + +## toStartOfWeek (t \[, mode\]) {#tostartofweektmode} + +Arrondit une date ou une date avec l'heure au dimanche ou au lundi le plus proche par mode. +Renvoie la date. +L'argument mode fonctionne exactement comme l'argument mode de toWeek(). Pour la syntaxe à argument unique, une valeur de mode de 0 est utilisée. + +## toStartOfDay {#tostartofday} + +Arrondit une date avec le temps au début de la journée. + +## toStartOfHour {#tostartofhour} + +Arrondit une date avec le temps au début de l " heure. + +## toStartOfMinute {#tostartofminute} + +Arrondit une date avec le temps au début de la minute. + +## toStartOfFiveMinute {#tostartoffiveminute} + +Arrondit à une date avec l'heure de début de l'intervalle de cinq minutes. + +## toStartOfTenMinutes {#tostartoftenminutes} + +Arrondit une date avec le temps au début de l " intervalle de dix minutes. + +## toStartOfFifteenMinutes {#tostartoffifteenminutes} + +Arrondit la date avec le temps jusqu'au début de l'intervalle de quinze minutes. + +## toStartOfInterval(time\_or\_data, intervalle x Unité \[, time\_zone\]) {#tostartofintervaltime-or-data-interval-x-unit-time-zone} + +Ceci est une généralisation d'autres fonctions nommées `toStartOf*`. Exemple, +`toStartOfInterval(t, INTERVAL 1 year)` renvoie la même chose que `toStartOfYear(t)`, +`toStartOfInterval(t, INTERVAL 1 month)` renvoie la même chose que `toStartOfMonth(t)`, +`toStartOfInterval(t, INTERVAL 1 day)` renvoie la même chose que `toStartOfDay(t)`, +`toStartOfInterval(t, INTERVAL 15 minute)` renvoie la même chose que `toStartOfFifteenMinutes(t)` etc. + +## toTime {#totime} + +Convertit une date avec l'heure en une certaine date fixe, tout en préservant l'heure. + +## toRelativeYearNum {#torelativeyearnum} + +Convertit une date avec l'heure ou la date, le numéro de l'année, à partir d'un certain point fixe dans le passé. + +## toRelativeQuarterNum {#torelativequarternum} + +Convertit une date avec l'heure ou la date au numéro du trimestre, à partir d'un certain point fixe dans le passé. + +## toRelativeMonthNum {#torelativemonthnum} + +Convertit une date avec l'heure ou la date au numéro du mois, à partir d'un certain point fixe dans le passé. + +## toRelativeWeekNum {#torelativeweeknum} + +Convertit une date avec l'heure ou la date, le numéro de la semaine, à partir d'un certain point fixe dans le passé. + +## toRelativeDayNum {#torelativedaynum} + +Convertit une date avec l'heure ou la date au numéro du jour, à partir d'un certain point fixe dans le passé. + +## toRelativeHourNum {#torelativehournum} + +Convertit une date avec l'heure ou la date au nombre de l'heure, à partir d'un certain point fixe dans le passé. + +## toRelativeMinuteNum {#torelativeminutenum} + +Convertit une date avec l'heure ou la date au numéro de la minute, à partir d'un certain point fixe dans le passé. + +## toRelativeSecondNum {#torelativesecondnum} + +Convertit une date avec l'heure ou la date au numéro de la seconde, à partir d'un certain point fixe dans le passé. + +## toISOYear {#toisoyear} + +Convertit une date ou une date avec l'heure en un numéro UInt16 contenant le numéro D'année ISO. + +## toISOWeek {#toisoweek} + +Convertit une date ou une date avec l'heure en un numéro UInt8 contenant le numéro de semaine ISO. + +## toWeek (date \[, mode\]) {#toweekdatemode} + +Cette fonction renvoie le numéro de semaine pour date ou datetime. La forme à deux arguments de toWeek() vous permet de spécifier si la semaine commence le dimanche ou le lundi et si la valeur de retour doit être comprise entre 0 et 53 ou entre 1 et 53. Si l'argument mode est omis, le mode par défaut est 0. +`toISOWeek()`est une fonction de compatibilité équivalente à `toWeek(date,3)`. +Le tableau suivant décrit le fonctionnement de l'argument mode. + +| Mode | Premier jour de la semaine | Gamme | Week 1 is the first week … | +|------|----------------------------|-------|----------------------------------| +| 0 | Dimanche | 0-53 | avec un dimanche cette année | +| 1 | Lundi | 0-53 | avec 4 jours ou plus cette année | +| 2 | Dimanche | 1-53 | avec un dimanche cette année | +| 3 | Lundi | 1-53 | avec 4 jours ou plus cette année | +| 4 | Dimanche | 0-53 | avec 4 jours ou plus cette année | +| 5 | Lundi | 0-53 | avec un lundi cette année | +| 6 | Dimanche | 1-53 | avec 4 jours ou plus cette année | +| 7 | Lundi | 1-53 | avec un lundi cette année | +| 8 | Dimanche | 1-53 | contient Janvier 1 | +| 9 | Lundi | 1-53 | contient Janvier 1 | + +Pour les valeurs de mode avec une signification de “with 4 or more days this year,” les semaines sont numérotées selon ISO 8601: 1988: + +- Si la semaine contenant Janvier 1 A 4 jours ou plus dans la nouvelle année, il est Semaine 1. + +- Sinon, c'est la dernière semaine de l'année précédente, et la semaine prochaine est la semaine 1. + +Pour les valeurs de mode avec une signification de “contains January 1”, la semaine contient Janvier 1 est Semaine 1. Peu importe combien de jours dans la nouvelle année la semaine contenait, même si elle contenait seulement un jour. + +``` sql +toWeek(date, [, mode][, Timezone]) +``` + +**Paramètre** + +- `date` – Date or DateTime. +- `mode` – Optional parameter, Range of values is \[0,9\], default is 0. +- `Timezone` – Optional parameter, it behaves like any other conversion function. + +**Exemple** + +``` sql +SELECT toDate('2016-12-27') AS date, toWeek(date) AS week0, toWeek(date,1) AS week1, toWeek(date,9) AS week9; +``` + +``` text +┌───────date─┬─week0─┬─week1─┬─week9─┐ +│ 2016-12-27 │ 52 │ 52 │ 1 │ +└────────────┴───────┴───────┴───────┘ +``` + +## toYearWeek (date \[, mode\]) {#toyearweekdatemode} + +Retourne l'année et la semaine pour une date. L'année dans le résultat peut être différente de l'année dans l'argument date pour la première et la dernière semaine de l'année. + +L'argument mode fonctionne exactement comme l'argument mode de toWeek(). Pour la syntaxe à argument unique, une valeur de mode de 0 est utilisée. + +`toISOYear()`est une fonction de compatibilité équivalente à `intDiv(toYearWeek(date,3),100)`. + +**Exemple** + +``` sql +SELECT toDate('2016-12-27') AS date, toYearWeek(date) AS yearWeek0, toYearWeek(date,1) AS yearWeek1, toYearWeek(date,9) AS yearWeek9; +``` + +``` text +┌───────date─┬─yearWeek0─┬─yearWeek1─┬─yearWeek9─┐ +│ 2016-12-27 │ 201652 │ 201652 │ 201701 │ +└────────────┴───────────┴───────────┴───────────┘ +``` + +## maintenant {#now} + +Accepte zéro argument et renvoie l'heure actuelle à l'un des moments de l'exécution de la requête. +Cette fonction renvoie une constante, même si la requête a pris beaucoup de temps à compléter. + +## aujourd' {#today} + +Accepte zéro argument et renvoie la date actuelle à l'un des moments de l'exécution de la requête. +Le même que ‘toDate(now())’. + +## hier {#yesterday} + +Accepte zéro argument et renvoie la date d'hier à l'un des moments de l'exécution de la requête. +Le même que ‘today() - 1’. + +## l'horaire de diffusion {#timeslot} + +Arrondit le temps à la demi-heure. +Cette fonction est spécifique à Yandex.Metrica, car une demi-heure est le temps minimum pour diviser une session en deux sessions si une balise de suivi affiche les pages vues consécutives d'un seul utilisateur qui diffèrent dans le temps de strictement plus que ce montant. Cela signifie que les tuples (l'ID de balise, l'ID utilisateur et l'intervalle de temps) peuvent être utilisés pour rechercher les pages vues incluses dans la session correspondante. + +## toYYYYMM {#toyyyymm} + +Convertit une date ou une date avec l'heure en un numéro UInt32 contenant le numéro d'année et de mois (AAAA \* 100 + MM). + +## toYYYYMMDD {#toyyyymmdd} + +Convertit une date ou une date avec l'heure en un numéro UInt32 contenant le numéro d'année et de mois (AAAA \* 10000 + MM \* 100 + JJ). + +## toYYYYMMDDhhmmss {#toyyyymmddhhmmss} + +Convertit une date ou une date avec l'heure en un numéro UInt64 contenant le numéro d'année et de mois (AAAA \* 10000000000 + MM \* 100000000 + DD \* 1000000 + hh \* 10000 + mm \* 100 + ss). + +## addYears, addMonths, addWeeks, addDays, addHours, addMinutes, addSeconds, addQuarters {#addyears-addmonths-addweeks-adddays-addhours-addminutes-addseconds-addquarters} + +Fonction ajoute une date / DateTime intervalle à une Date / DateTime, puis retourner la Date / DateTime. Exemple: + +``` sql +WITH + toDate('2018-01-01') AS date, + toDateTime('2018-01-01 00:00:00') AS date_time +SELECT + addYears(date, 1) AS add_years_with_date, + addYears(date_time, 1) AS add_years_with_date_time +``` + +``` text +┌─add_years_with_date─┬─add_years_with_date_time─┐ +│ 2019-01-01 │ 2019-01-01 00:00:00 │ +└─────────────────────┴──────────────────────────┘ +``` + +## subtractYears, subtractMonths, subtractWeeks, subtractDays, subtractHours, subtractMinutes, subtractSeconds, subtractQuarters {#subtractyears-subtractmonths-subtractweeks-subtractdays-subtracthours-subtractminutes-subtractseconds-subtractquarters} + +Fonction soustrayez un intervalle de Date / DateTime à une Date / DateTime, puis renvoyez la Date / DateTime. Exemple: + +``` sql +WITH + toDate('2019-01-01') AS date, + toDateTime('2019-01-01 00:00:00') AS date_time +SELECT + subtractYears(date, 1) AS subtract_years_with_date, + subtractYears(date_time, 1) AS subtract_years_with_date_time +``` + +``` text +┌─subtract_years_with_date─┬─subtract_years_with_date_time─┐ +│ 2018-01-01 │ 2018-01-01 00:00:00 │ +└──────────────────────────┴───────────────────────────────┘ +``` + +## dateDiff {#datediff} + +Renvoie la différence entre deux valeurs Date ou DateTime. + +**Syntaxe** + +``` sql +dateDiff('unit', startdate, enddate, [timezone]) +``` + +**Paramètre** + +- `unit` — Time unit, in which the returned value is expressed. [Chaîne](../syntax.md#syntax-string-literal). + + Supported values: + + | unit | + | ------ | + |second | + |minute | + |hour | + |day | + |week | + |month | + |quarter | + |year | + +- `startdate` — The first time value to compare. [Date](../../data_types/date.md) ou [DateTime](../../data_types/datetime.md). + +- `enddate` — The second time value to compare. [Date](../../data_types/date.md) ou [DateTime](../../data_types/datetime.md). + +- `timezone` — Optional parameter. If specified, it is applied to both `startdate` et `enddate`. Si non spécifié, fuseaux horaires de l' `startdate` et `enddate` sont utilisés. Si elles ne sont pas identiques, le résultat n'est pas spécifié. + +**Valeur renvoyée** + +Différence entre `startdate` et `enddate` exprimé en `unit`. + +Type: `int`. + +**Exemple** + +Requête: + +``` sql +SELECT dateDiff('hour', toDateTime('2018-01-01 22:00:00'), toDateTime('2018-01-02 23:00:00')); +``` + +Résultat: + +``` text +┌─dateDiff('hour', toDateTime('2018-01-01 22:00:00'), toDateTime('2018-01-02 23:00:00'))─┐ +│ 25 │ +└────────────────────────────────────────────────────────────────────────────────────────┘ +``` + +## intervalle de temps (StartTime, Duration, \[, Size\]) {#timeslotsstarttime-duration-size} + +Pour un intervalle de temps commençant à ‘StartTime’ et de poursuivre pour ‘Duration’ secondes, il renvoie un tableau de moments dans le temps, composé de points de cet intervalle arrondis vers le bas à la ‘Size’ en quelques secondes. ‘Size’ est un paramètre optionnel: une constante UInt32, définie sur 1800 par défaut. +Exemple, `timeSlots(toDateTime('2012-01-01 12:20:00'), 600) = [toDateTime('2012-01-01 12:00:00'), toDateTime('2012-01-01 12:30:00')]`. +Ceci est nécessaire pour rechercher les pages vues dans la session correspondante. + +## formatDateTime(Heure, Format \[, fuseau horaire\]) {#formatdatetime} + +Function formats a Time according given Format string. N.B.: Format is a constant expression, e.g. you can not have multiple formats for single result column. + +Modificateurs pris en charge pour le Format: +(“Example” colonne affiche le résultat de formatage pour le temps `2018-01-02 22:33:44`) + +| Modificateur | Description | Exemple | +|--------------|------------------------------------------------------------------------|------------| +| %C | année divisée par 100 et tronquée en entier (00-99) | 20 | +| %d | jour du mois, zero-rembourré (01-31) | 02 | +| %D | Date courte MM / JJ / AA, équivalente à %m / % d / % y | 01/02/18 | +| % e | jour du mois, rembourré dans l'espace ( 1-31) | 2 | +| %F | date courte AAAA-MM-JJ, équivalente à % Y - % m - % d | 2018-01-02 | +| %H | heure en format 24h (00-23) | 22 | +| %I | heure en format 12h (01-12) | 10 | +| %j | les jours de l'année (001-366) | 002 | +| %m | mois en nombre décimal (01-12) | 01 | +| %M | minute (00-59) | 33 | +| %et | caractère de nouvelle ligne (") | | +| %p | Désignation AM ou PM | PM | +| %R | 24 heures HH:MM temps, équivalent à %H: % M | 22:33 | +| %S | deuxième (00-59) | 44 | +| % t | horizontal-caractère de tabulation (') | | +| %T | Format d'heure ISO 8601 (HH:MM:SS), équivalent à %H: % M:%S | 22:33:44 | +| % u | ISO 8601 jour de la semaine comme numéro avec Lundi comme 1 (1-7) | 2 | +| %V | Numéro de semaine ISO 8601 (01-53) | 01 | +| %W | jour de la semaine comme un nombre décimal avec dimanche comme 0 (0-6) | 2 | +| % y | Année, deux derniers chiffres (00-99) | 18 | +| %Y | An | 2018 | +| %% | signe | % | + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/date_time_functions/) diff --git a/docs/fr/query_language/functions/encoding_functions.md b/docs/fr/query_language/functions/encoding_functions.md new file mode 100644 index 00000000000..87a848cf1a8 --- /dev/null +++ b/docs/fr/query_language/functions/encoding_functions.md @@ -0,0 +1,172 @@ +--- +machine_translated: true +--- + +# L'encodage des fonctions {#encoding-functions} + +## char {#char} + +Retourne la chaîne avec la longueur que le nombre d'arguments passés et chaque octet a la valeur de l'argument correspondant. Accepte plusieurs arguments de types numériques. Si la valeur de l'argument est hors de portée du type de données UInt8, elle est convertie en UInt8 avec arrondi et débordement possibles. + +**Syntaxe** + +``` sql +char(number_1, [number_2, ..., number_n]); +``` + +**Paramètre** + +- `number_1, number_2, ..., number_n` — Numerical arguments interpreted as integers. Types: [Int](../../data_types/int_uint.md), [Flottant](../../data_types/float.md). + +**Valeur renvoyée** + +- une chaîne d'octets. + +Type: `String`. + +**Exemple** + +Requête: + +``` sql +SELECT char(104.1, 101, 108.9, 108.9, 111) AS hello +``` + +Résultat: + +``` text +┌─hello─┐ +│ hello │ +└───────┘ +``` + +Vous pouvez construire une chaîne de codage arbitraire en passant les octets correspondants. Voici un exemple pour UTF-8: + +Requête: + +``` sql +SELECT char(0xD0, 0xBF, 0xD1, 0x80, 0xD0, 0xB8, 0xD0, 0xB2, 0xD0, 0xB5, 0xD1, 0x82) AS hello; +``` + +Résultat: + +``` text +┌─hello──┐ +│ привет │ +└────────┘ +``` + +Requête: + +``` sql +SELECT char(0xE4, 0xBD, 0xA0, 0xE5, 0xA5, 0xBD) AS hello; +``` + +Résultat: + +``` text +┌─hello─┐ +│ 你好 │ +└───────┘ +``` + +## Hex {#hex} + +Renvoie une chaîne contenant la représentation hexadécimale de l'argument. + +**Syntaxe** + +``` sql +hex(arg) +``` + +La fonction utilise des lettres majuscules `A-F` et ne pas utiliser de préfixes (comme `0x`) ou suffixes (comme `h`). + +Pour les arguments entiers, il imprime des chiffres hexadécimaux (“nibbles”) du plus significatif au moins significatif (big endian ou “human readable” ordre). Il commence par l'octet non nul le plus significatif (les octets de début zéro sont omis) mais imprime toujours les deux chiffres de chaque octet même si le chiffre de début est nul. + +Exemple: + +**Exemple** + +Requête: + +``` sql +SELECT hex(1); +``` + +Résultat: + +``` text +01 +``` + +Les valeurs de type `Date` et `DateTime` sont formatés comme des entiers correspondants (le nombre de jours depuis Epoch pour Date et la valeur de L'horodatage Unix pour DateTime). + +Pour `String` et `FixedString`, tous les octets sont simplement codés en deux nombres hexadécimaux. Zéro octets ne sont pas omis. + +Les valeurs des types virgule flottante et décimale sont codées comme leur représentation en mémoire. Comme nous soutenons l'architecture little endian, ils sont codés dans little endian. Zéro octets de début / fin ne sont pas omis. + +**Paramètre** + +- `arg` — A value to convert to hexadecimal. Types: [Chaîne](../../data_types/string.md), [UInt](../../data_types/int_uint.md), [Flottant](../../data_types/float.md), [Décimal](../../data_types/decimal.md), [Date](../../data_types/date.md) ou [DateTime](../../data_types/datetime.md). + +**Valeur renvoyée** + +- Une chaîne avec la représentation hexadécimale de l'argument. + +Type: `String`. + +**Exemple** + +Requête: + +``` sql +SELECT hex(toFloat32(number)) as hex_presentation FROM numbers(15, 2); +``` + +Résultat: + +``` text +┌─hex_presentation─┐ +│ 00007041 │ +│ 00008041 │ +└──────────────────┘ +``` + +Requête: + +``` sql +SELECT hex(toFloat64(number)) as hex_presentation FROM numbers(15, 2); +``` + +Résultat: + +``` text +┌─hex_presentation─┐ +│ 0000000000002E40 │ +│ 0000000000003040 │ +└──────────────────┘ +``` + +## unhex (str) {#unhexstr} + +Accepte une chaîne contenant un nombre quelconque de chiffres hexadécimaux, et renvoie une chaîne contenant le correspondant octets. Prend en charge les lettres majuscules et minuscules A-F. Le nombre de chiffres hexadécimaux ne doit pas être pair. S'il est impair, le dernier chiffre est interprété comme la moitié la moins significative de l'octet 00-0F. Si la chaîne d'argument contient autre chose que des chiffres hexadécimaux, un résultat défini par l'implémentation est renvoyé (une exception n'est pas levée). +Si vous voulez convertir le résultat en un nombre, vous pouvez utiliser le ‘reverse’ et ‘reinterpretAsType’ fonction. + +## UUIDStringToNum (str) {#uuidstringtonumstr} + +Accepte une chaîne contenant 36 caractères dans le format `123e4567-e89b-12d3-a456-426655440000`, et le renvoie comme un ensemble d'octets dans un FixedString (16). + +## UUIDNumToString (str) {#uuidnumtostringstr} + +Accepte une valeur FixedString (16). Renvoie une chaîne contenant 36 caractères au format texte. + +## bitmaskToList(num) {#bitmasktolistnum} + +Accepte un entier. Renvoie une chaîne contenant la liste des puissances de deux qui totalisent le nombre source lorsqu'il est additionné. Ils sont séparés par des virgules sans espaces au format texte, dans l'ordre croissant. + +## bitmaskToArray(num) {#bitmasktoarraynum} + +Accepte un entier. Renvoie un tableau de nombres UInt64 contenant la liste des puissances de deux qui totalisent le nombre source lorsqu'il est additionné. Les numéros dans le tableau sont dans l'ordre croissant. + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/encoding_functions/) diff --git a/docs/fr/query_language/functions/ext_dict_functions.md b/docs/fr/query_language/functions/ext_dict_functions.md new file mode 100644 index 00000000000..40d606b18bd --- /dev/null +++ b/docs/fr/query_language/functions/ext_dict_functions.md @@ -0,0 +1,202 @@ +--- +machine_translated: true +--- + +# Fonctions pour travailler avec des dictionnaires externes {#ext_dict_functions} + +Pour plus d'informations sur la connexion et la configuration de dictionnaires externes, voir [Dictionnaires externes](../dicts/external_dicts.md). + +## dictGet {#dictget} + +Récupère une valeur d'un dictionnaire externe. + +``` sql +dictGet('dict_name', 'attr_name', id_expr) +dictGetOrDefault('dict_name', 'attr_name', id_expr, default_value_expr) +``` + +**Paramètre** + +- `dict_name` — Name of the dictionary. [Chaîne littérale](../syntax.md#syntax-string-literal). +- `attr_name` — Name of the column of the dictionary. [Chaîne littérale](../syntax.md#syntax-string-literal). +- `id_expr` — Key value. [Expression](../syntax.md#syntax-expressions) de retour d'un [UInt64](../../data_types/int_uint.md) ou [Tuple](../../data_types/tuple.md)- tapez la valeur en fonction de la configuration du dictionnaire. +- `default_value_expr` — Value returned if the dictionary doesn't contain a row with the `id_expr` clé. [Expression](../syntax.md#syntax-expressions) renvoyer la valeur dans le type de données configuré pour `attr_name` attribut. + +**Valeur renvoyée** + +- Si ClickHouse analyse l'attribut avec succès dans le [l'attribut type de données](../../query_language/dicts/external_dicts_dict_structure.md#ext_dict_structure-attributes), les fonctions renvoient la valeur du dictionnaire de l'attribut qui correspond à `id_expr`. + +- Si il n'y a pas la clé, correspondant à `id_expr` dans le dictionnaire, puis: + + - `dictGet` returns the content of the `` element specified for the attribute in the dictionary configuration. + - `dictGetOrDefault` returns the value passed as the `default_value_expr` parameter. + +ClickHouse lève une exception si elle ne peut pas analyser la valeur de l'attribut ou si la valeur ne correspond pas au type de données d'attribut. + +**Exemple** + +Créer un fichier texte `ext-dict-text.csv` contenant les éléments suivants: + +``` text +1,1 +2,2 +``` + +La première colonne est `id` la deuxième colonne est `c1`. + +Configurer le dictionnaire externe: + +``` xml + + + ext-dict-test + + + /path-to/ext-dict-test.csv + CSV + + + + + + + + id + + + c1 + UInt32 + + + + 0 + + +``` + +Effectuer la requête: + +``` sql +SELECT + dictGetOrDefault('ext-dict-test', 'c1', number + 1, toUInt32(number * 10)) AS val, + toTypeName(val) AS type +FROM system.numbers +LIMIT 3 +``` + +``` text +┌─val─┬─type───┐ +│ 1 │ UInt32 │ +│ 2 │ UInt32 │ +│ 20 │ UInt32 │ +└─────┴────────┘ +``` + +**Voir Aussi** + +- [Dictionnaires Externes](../dicts/external_dicts.md) + +## dictHas {#dicthas} + +Vérifie si une clé est présente dans un dictionnaire. + +``` sql +dictHas('dict_name', id_expr) +``` + +**Paramètre** + +- `dict_name` — Name of the dictionary. [Chaîne littérale](../syntax.md#syntax-string-literal). +- `id_expr` — Key value. [Expression](../syntax.md#syntax-expressions) de retour d'un [UInt64](../../data_types/int_uint.md)-le type de la valeur. + +**Valeur renvoyée** + +- 0, si il n'y a pas de clé. +- 1, si il y a une clé. + +Type: `UInt8`. + +## dictGetHierarchy {#dictgethierarchy} + +Crée un tableau contenant tous les parents d'une clé dans le [hiérarchique dictionnaire](../dicts/external_dicts_dict_hierarchical.md). + +**Syntaxe** + +``` sql +dictGetHierarchy('dict_name', key) +``` + +**Paramètre** + +- `dict_name` — Name of the dictionary. [Chaîne littérale](../syntax.md#syntax-string-literal). +- `key` — Key value. [Expression](../syntax.md#syntax-expressions) de retour d'un [UInt64](../../data_types/int_uint.md)-le type de la valeur. + +**Valeur renvoyée** + +- Les Parents pour la clé. + +Type: [Tableau (UInt64)](../../data_types/array.md). + +## dictisine {#dictisin} + +Vérifie l'ancêtre d'une clé à travers toute la chaîne hiérarchique dans le dictionnaire. + +``` sql +dictIsIn('dict_name', child_id_expr, ancestor_id_expr) +``` + +**Paramètre** + +- `dict_name` — Name of the dictionary. [Chaîne littérale](../syntax.md#syntax-string-literal). +- `child_id_expr` — Key to be checked. [Expression](../syntax.md#syntax-expressions) de retour d'un [UInt64](../../data_types/int_uint.md)-le type de la valeur. +- `ancestor_id_expr` — Alleged ancestor of the `child_id_expr` clé. [Expression](../syntax.md#syntax-expressions) de retour d'un [UInt64](../../data_types/int_uint.md)-le type de la valeur. + +**Valeur renvoyée** + +- 0, si `child_id_expr` n'est pas un enfant de `ancestor_id_expr`. +- 1, si `child_id_expr` est un enfant de `ancestor_id_expr` ou si `child_id_expr` est un `ancestor_id_expr`. + +Type: `UInt8`. + +## D'autres fonctions {#ext_dict_functions-other} + +ClickHouse prend en charge des fonctions spécialisées qui convertissent les valeurs d'attribut de dictionnaire en un type de données spécifique, quelle que soit la configuration du dictionnaire. + +Fonction: + +- `dictGetInt8`, `dictGetInt16`, `dictGetInt32`, `dictGetInt64` +- `dictGetUInt8`, `dictGetUInt16`, `dictGetUInt32`, `dictGetUInt64` +- `dictGetFloat32`, `dictGetFloat64` +- `dictGetDate` +- `dictGetDateTime` +- `dictGetUUID` +- `dictGetString` + +Toutes ces fonctions ont le `OrDefault` modification. Exemple, `dictGetDateOrDefault`. + +Syntaxe: + +``` sql +dictGet[Type]('dict_name', 'attr_name', id_expr) +dictGet[Type]OrDefault('dict_name', 'attr_name', id_expr, default_value_expr) +``` + +**Paramètre** + +- `dict_name` — Name of the dictionary. [Chaîne littérale](../syntax.md#syntax-string-literal). +- `attr_name` — Name of the column of the dictionary. [Chaîne littérale](../syntax.md#syntax-string-literal). +- `id_expr` — Key value. [Expression](../syntax.md#syntax-expressions) de retour d'un [UInt64](../../data_types/int_uint.md)-le type de la valeur. +- `default_value_expr` — Value which is returned if the dictionary doesn't contain a row with the `id_expr` clé. [Expression](../syntax.md#syntax-expressions) renvoyer une valeur dans le type de données configuré pour `attr_name` attribut. + +**Valeur renvoyée** + +- Si ClickHouse analyse l'attribut avec succès dans le [l'attribut type de données](../../query_language/dicts/external_dicts_dict_structure.md#ext_dict_structure-attributes), les fonctions renvoient la valeur du dictionnaire de l'attribut qui correspond à `id_expr`. + +- Si il n'est pas demandé `id_expr` dans le dictionnaire,: + + - `dictGet[Type]` returns the content of the `` element specified for the attribute in the dictionary configuration. + - `dictGet[Type]OrDefault` returns the value passed as the `default_value_expr` parameter. + +ClickHouse lève une exception si elle ne peut pas analyser la valeur de l'attribut ou si la valeur ne correspond pas au type de données d'attribut. + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/ext_dict_functions/) diff --git a/docs/fr/query_language/functions/functions_for_nulls.md b/docs/fr/query_language/functions/functions_for_nulls.md new file mode 100644 index 00000000000..361c758765c --- /dev/null +++ b/docs/fr/query_language/functions/functions_for_nulls.md @@ -0,0 +1,309 @@ +--- +machine_translated: true +--- + +# Fonctions pour travailler avec des agrégats nullables {#functions-for-working-with-nullable-aggregates} + +## isNull {#isnull} + +Vérifie si l'argument est [NULL](../syntax.md#null). + +``` sql +isNull(x) +``` + +**Paramètre** + +- `x` — A value with a non-compound data type. + +**Valeur renvoyée** + +- `1` si `x` être `NULL`. +- `0` si `x` n'est pas `NULL`. + +**Exemple** + +Table d'entrée + +``` text +┌─x─┬────y─┐ +│ 1 │ ᴺᵁᴸᴸ │ +│ 2 │ 3 │ +└───┴──────┘ +``` + +Requête + +``` sql +SELECT x FROM t_null WHERE isNull(y) +``` + +``` text +┌─x─┐ +│ 1 │ +└───┘ +``` + +## isNotNull {#isnotnull} + +Vérifie si l'argument est [NULL](../syntax.md#null). + +``` sql +isNotNull(x) +``` + +**Paramètre:** + +- `x` — A value with a non-compound data type. + +**Valeur renvoyée** + +- `0` si `x` être `NULL`. +- `1` si `x` n'est pas `NULL`. + +**Exemple** + +Table d'entrée + +``` text +┌─x─┬────y─┐ +│ 1 │ ᴺᵁᴸᴸ │ +│ 2 │ 3 │ +└───┴──────┘ +``` + +Requête + +``` sql +SELECT x FROM t_null WHERE isNotNull(y) +``` + +``` text +┌─x─┐ +│ 2 │ +└───┘ +``` + +## fusionner {#coalesce} + +Vérifie de gauche à droite si `NULL` les arguments ont été passés et renvoie le premier non-`NULL` argument. + +``` sql +coalesce(x,...) +``` + +**Paramètre:** + +- N'importe quel nombre de paramètres d'un type non composé. Tous les paramètres doivent être compatibles par type de données. + +**Valeurs renvoyées** + +- Le premier non-`NULL` argument. +- `NULL` si tous les arguments sont `NULL`. + +**Exemple** + +Considérez une liste de contacts qui peuvent spécifier plusieurs façons de contacter un client. + +``` text +┌─name─────┬─mail─┬─phone─────┬──icq─┐ +│ client 1 │ ᴺᵁᴸᴸ │ 123-45-67 │ 123 │ +│ client 2 │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ ᴺᵁᴸᴸ │ +└──────────┴──────┴───────────┴──────┘ +``` + +Le `mail` et `phone` les champs sont de type Chaîne de caractères, mais la `icq` le terrain est `UInt32`, de sorte qu'il doit être converti en `String`. + +Obtenir la première méthode de contact pour le client à partir de la liste de contacts: + +``` sql +SELECT coalesce(mail, phone, CAST(icq,'Nullable(String)')) FROM aBook +``` + +``` text +┌─name─────┬─coalesce(mail, phone, CAST(icq, 'Nullable(String)'))─┐ +│ client 1 │ 123-45-67 │ +│ client 2 │ ᴺᵁᴸᴸ │ +└──────────┴──────────────────────────────────────────────────────┘ +``` + +## ifNull {#ifnull} + +Renvoie une valeur alternative si l'argument principal est `NULL`. + +``` sql +ifNull(x,alt) +``` + +**Paramètre:** + +- `x` — The value to check for `NULL`. +- `alt` — The value that the function returns if `x` être `NULL`. + +**Valeurs renvoyées** + +- Valeur `x`, si `x` n'est pas `NULL`. +- Valeur `alt`, si `x` être `NULL`. + +**Exemple** + +``` sql +SELECT ifNull('a', 'b') +``` + +``` text +┌─ifNull('a', 'b')─┐ +│ a │ +└──────────────────┘ +``` + +``` sql +SELECT ifNull(NULL, 'b') +``` + +``` text +┌─ifNull(NULL, 'b')─┐ +│ b │ +└───────────────────┘ +``` + +## nullIf {#nullif} + +Retourner `NULL` si les arguments sont égaux. + +``` sql +nullIf(x, y) +``` + +**Paramètre:** + +`x`, `y` — Values for comparison. They must be compatible types, or ClickHouse will generate an exception. + +**Valeurs renvoyées** + +- `NULL` si les arguments sont égaux. +- Le `x` valeur, si les arguments ne sont pas égaux. + +**Exemple** + +``` sql +SELECT nullIf(1, 1) +``` + +``` text +┌─nullIf(1, 1)─┐ +│ ᴺᵁᴸᴸ │ +└──────────────┘ +``` + +``` sql +SELECT nullIf(1, 2) +``` + +``` text +┌─nullIf(1, 2)─┐ +│ 1 │ +└──────────────┘ +``` + +## assumeNotNull {#assumenotnull} + +Résultats dans une valeur de type [Nullable](../../data_types/nullable.md) pour un non- `Nullable` si la valeur n'est pas `NULL`. + +``` sql +assumeNotNull(x) +``` + +**Paramètre:** + +- `x` — The original value. + +**Valeurs renvoyées** + +- La valeur d'origine du non-`Nullable` type, si elle n'est pas `NULL`. +- La valeur par défaut pour le non-`Nullable` Tapez si la valeur d'origine était `NULL`. + +**Exemple** + +Envisager l' `t_null` table. + +``` sql +SHOW CREATE TABLE t_null +``` + +``` text +┌─statement─────────────────────────────────────────────────────────────────┐ +│ CREATE TABLE default.t_null ( x Int8, y Nullable(Int8)) ENGINE = TinyLog │ +└───────────────────────────────────────────────────────────────────────────┘ +``` + +``` text +┌─x─┬────y─┐ +│ 1 │ ᴺᵁᴸᴸ │ +│ 2 │ 3 │ +└───┴──────┘ +``` + +Appliquer le `assumeNotNull` la fonction de la `y` colonne. + +``` sql +SELECT assumeNotNull(y) FROM t_null +``` + +``` text +┌─assumeNotNull(y)─┐ +│ 0 │ +│ 3 │ +└──────────────────┘ +``` + +``` sql +SELECT toTypeName(assumeNotNull(y)) FROM t_null +``` + +``` text +┌─toTypeName(assumeNotNull(y))─┐ +│ Int8 │ +│ Int8 │ +└──────────────────────────────┘ +``` + +## toNullable {#tonullable} + +Convertit le type d'argument en `Nullable`. + +``` sql +toNullable(x) +``` + +**Paramètre:** + +- `x` — The value of any non-compound type. + +**Valeur renvoyée** + +- La valeur d'entrée avec un `Nullable` type. + +**Exemple** + +``` sql +SELECT toTypeName(10) +``` + +``` text +┌─toTypeName(10)─┐ +│ UInt8 │ +└────────────────┘ +``` + +``` sql +SELECT toTypeName(toNullable(10)) +``` + +``` text +┌─toTypeName(toNullable(10))─┐ +│ Nullable(UInt8) │ +└────────────────────────────┘ +``` + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/functions_for_nulls/) diff --git a/docs/fr/query_language/functions/geo.md b/docs/fr/query_language/functions/geo.md new file mode 100644 index 00000000000..1bff6d147d9 --- /dev/null +++ b/docs/fr/query_language/functions/geo.md @@ -0,0 +1,507 @@ +--- +machine_translated: true +--- + +# Fonctions pour travailler avec des coordonnées géographiques {#functions-for-working-with-geographical-coordinates} + +## greatCircleDistance {#greatcircledistance} + +Calculer la distance entre deux points sur la surface de la Terre en utilisant [la formule du grand cercle](https://en.wikipedia.org/wiki/Great-circle_distance). + +``` sql +greatCircleDistance(lon1Deg, lat1Deg, lon2Deg, lat2Deg) +``` + +**Les paramètres d'entrée** + +- `lon1Deg` — Longitude of the first point in degrees. Range: `[-180°, 180°]`. +- `lat1Deg` — Latitude of the first point in degrees. Range: `[-90°, 90°]`. +- `lon2Deg` — Longitude of the second point in degrees. Range: `[-180°, 180°]`. +- `lat2Deg` — Latitude of the second point in degrees. Range: `[-90°, 90°]`. + +Les valeurs positives correspondent à la latitude nord et à la longitude Est, et les valeurs négatives à la latitude Sud et à la longitude ouest. + +**Valeur renvoyée** + +La distance entre deux points sur la surface de la Terre, en mètres. + +Génère une exception lorsque les valeurs des paramètres d'entrée se situent en dehors de la plage. + +**Exemple** + +``` sql +SELECT greatCircleDistance(55.755831, 37.617673, -55.755831, -37.617673) +``` + +``` text +┌─greatCircleDistance(55.755831, 37.617673, -55.755831, -37.617673)─┐ +│ 14132374.194975413 │ +└───────────────────────────────────────────────────────────────────┘ +``` + +## pointInEllipses {#pointinellipses} + +Vérifie si le point appartient à au moins une des ellipses. +Coordonnées géométriques sont dans le système de coordonnées Cartésiennes. + +``` sql +pointInEllipses(x, y, x₀, y₀, a₀, b₀,...,xₙ, yₙ, aₙ, bₙ) +``` + +**Les paramètres d'entrée** + +- `x, y` — Coordinates of a point on the plane. +- `xᵢ, yᵢ` — Coordinates of the center of the `i`-ème points de suspension. +- `aᵢ, bᵢ` — Axes of the `i`- e ellipse en unités de coordonnées x, Y. + +Les paramètres d'entrée doivent être `2+4⋅n`, où `n` est le nombre de points de suspension. + +**Valeurs renvoyées** + +`1` si le point est à l'intérieur d'au moins l'un des ellipses; `0`si elle ne l'est pas. + +**Exemple** + +``` sql +SELECT pointInEllipses(10., 10., 10., 9.1, 1., 0.9999) +``` + +``` text +┌─pointInEllipses(10., 10., 10., 9.1, 1., 0.9999)─┐ +│ 1 │ +└─────────────────────────────────────────────────┘ +``` + +## pointtinpolygon {#pointinpolygon} + +Vérifie si le point appartient au polygone sur l'avion. + +``` sql +pointInPolygon((x, y), [(a, b), (c, d) ...], ...) +``` + +**Les valeurs d'entrée** + +- `(x, y)` — Coordinates of a point on the plane. Data type — [Tuple](../../data_types/tuple.md) — A tuple of two numbers. +- `[(a, b), (c, d) ...]` — Polygon vertices. Data type — [Tableau](../../data_types/array.md). Chaque sommet est représenté par une paire de coordonnées `(a, b)`. Les sommets doivent être spécifiés dans le sens horaire ou antihoraire. Le nombre minimum de sommets est 3. Le polygone doit être constante. +- La fonction prend également en charge les polygones avec des trous (découper des sections). Dans ce cas, ajoutez des polygones qui définissent les sections découpées en utilisant des arguments supplémentaires de la fonction. La fonction ne prend pas en charge les polygones non simplement connectés. + +**Valeurs renvoyées** + +`1` si le point est à l'intérieur du polygone, `0` si elle ne l'est pas. +Si le point est sur la limite du polygone, la fonction peut renvoyer 0 ou 1. + +**Exemple** + +``` sql +SELECT pointInPolygon((3., 3.), [(6, 0), (8, 4), (5, 8), (0, 2)]) AS res +``` + +``` text +┌─res─┐ +│ 1 │ +└─────┘ +``` + +## geohashEncode {#geohashencode} + +Encode la latitude et la longitude en tant que chaîne geohash, voir (http://geohash.org/, https://en.wikipedia.org/wiki/Geohash). + +``` sql +geohashEncode(longitude, latitude, [precision]) +``` + +**Les valeurs d'entrée** + +- longitude longitude partie de la coordonnée que vous souhaitez encoder. Flottant dans la gamme`[-180°, 180°]` +- latitude latitude partie de la coordonnée que vous souhaitez encoder. Flottant dans la gamme `[-90°, 90°]` +- precision-facultatif, longueur de la chaîne codée résultante, par défaut `12`. Entier dans la gamme `[1, 12]`. Toute valeur inférieure à `1` ou supérieure à `12` silencieusement converti à `12`. + +**Valeurs renvoyées** + +- alphanumérique `String` de coordonnées codées (la version modifiée de l'alphabet de codage base32 est utilisée). + +**Exemple** + +``` sql +SELECT geohashEncode(-5.60302734375, 42.593994140625, 0) AS res +``` + +``` text +┌─res──────────┐ +│ ezs42d000000 │ +└──────────────┘ +``` + +## geohashDecode {#geohashdecode} + +Décode toute chaîne codée geohash en longitude et latitude. + +**Les valeurs d'entrée** + +- chaîne codée-chaîne codée geohash. + +**Valeurs renvoyées** + +- (longitude, latitude) - 2-n-uplet de `Float64` les valeurs de longitude et de latitude. + +**Exemple** + +``` sql +SELECT geohashDecode('ezs42') AS res +``` + +``` text +┌─res─────────────────────────────┐ +│ (-5.60302734375,42.60498046875) │ +└─────────────────────────────────┘ +``` + +## geoToH3 {#geotoh3} + +Retourner [H3](https://uber.github.io/h3/#/documentation/overview/introduction) point d'indice `(lon, lat)` avec une résolution spécifiée. + +[H3](https://uber.github.io/h3/#/documentation/overview/introduction) est un système d'indexation géographique où la surface de la Terre divisée en carreaux hexagonaux même. Ce système est hiérarchique, c'est-à-dire que chaque hexagone au niveau supérieur peut être divisé en sept, même mais plus petits, etc. + +Cet indice est principalement utilisé pour les emplacements de bucketing et d'autres manipulations géospatiales. + +**Syntaxe** + +``` sql +geoToH3(lon, lat, resolution) +``` + +**Paramètre** + +- `lon` — Longitude. Type: [Float64](../../data_types/float.md). +- `lat` — Latitude. Type: [Float64](../../data_types/float.md). +- `resolution` — Index resolution. Range: `[0, 15]`. Type: [UInt8](../../data_types/int_uint.md). + +**Valeurs renvoyées** + +- Numéro d'indice hexagonal. +- 0 en cas d'erreur. + +Type: `UInt64`. + +**Exemple** + +Requête: + +``` sql +SELECT geoToH3(37.79506683, 55.71290588, 15) as h3Index +``` + +Résultat: + +``` text +┌────────────h3Index─┐ +│ 644325524701193974 │ +└────────────────────┘ +``` + +## geohashesInBox {#geohashesinbox} + +Renvoie un tableau de chaînes codées geohash de précision donnée qui tombent à l'intérieur et croisent les limites d'une boîte donnée, essentiellement une grille 2D aplatie en tableau. + +**Les valeurs d'entrée** + +- longitude\_min-longitude min, valeur flottante dans la plage `[-180°, 180°]` +- latitude\_min-latitude min, valeur flottante dans la plage `[-90°, 90°]` +- longitude\_max-longitude maximale, valeur flottante dans la plage `[-180°, 180°]` +- latitude\_max-latitude maximale, valeur flottante dans la plage `[-90°, 90°]` +- précision - geohash précision, `UInt8` dans la gamme `[1, 12]` + +Veuillez noter que tous les paramètres de coordonnées doit être du même type: soit `Float32` ou `Float64`. + +**Valeurs renvoyées** + +- gamme de précision de longues chaînes de geohash-boîtes couvrant la zone, vous ne devriez pas compter sur l'ordre des éléments. +- \[\] - tableau vide si *min* les valeurs de *latitude* et *longitude* ne sont pas moins de correspondant *Max* valeur. + +Veuillez noter que la fonction lancera une exception si le tableau résultant a plus de 10'000'000 éléments. + +**Exemple** + +``` sql +SELECT geohashesInBox(24.48, 40.56, 24.785, 40.81, 4) AS thasos +``` + +``` text +┌─thasos──────────────────────────────────────┐ +│ ['sx1q','sx1r','sx32','sx1w','sx1x','sx38'] │ +└─────────────────────────────────────────────┘ +``` + +## h3GetBaseCell {#h3getbasecell} + +Renvoie le numéro de cellule de base de l'index. + +**Syntaxe** + +``` sql +h3GetBaseCell(index) +``` + +**Paramètre** + +- `index` — Hexagon index number. Type: [UInt64](../../data_types/int_uint.md). + +**Valeurs renvoyées** + +- Numéro de cellule de base hexagonale. Type: [UInt8](../../data_types/int_uint.md). + +**Exemple** + +Requête: + +``` sql +SELECT h3GetBaseCell(612916788725809151) as basecell +``` + +Résultat: + +``` text +┌─basecell─┐ +│ 12 │ +└──────────┘ +``` + +## h3HexAreaM2 {#h3hexaream2} + +Surface hexagonale Moyenne en mètres carrés à la résolution donnée. + +**Syntaxe** + +``` sql +h3HexAreaM2(resolution) +``` + +**Paramètre** + +- `resolution` — Index resolution. Range: `[0, 15]`. Type: [UInt8](../../data_types/int_uint.md). + +**Valeurs renvoyées** + +- Area in m². Type: [Float64](../../data_types/float.md). + +**Exemple** + +Requête: + +``` sql +SELECT h3HexAreaM2(13) as area +``` + +Résultat: + +``` text +┌─area─┐ +│ 43.9 │ +└──────┘ +``` + +## h3IndexesAreNeighbors {#h3indexesareneighbors} + +Renvoie si les H3Indexes fournis sont voisins ou non. + +**Syntaxe** + +``` sql +h3IndexesAreNeighbors(index1, index2) +``` + +**Paramètre** + +- `index1` — Hexagon index number. Type: [UInt64](../../data_types/int_uint.md). +- `index2` — Hexagon index number. Type: [UInt64](../../data_types/int_uint.md). + +**Valeurs renvoyées** + +- Retourner `1` si les index sont voisins, `0` autrement. Type: [UInt8](../../data_types/int_uint.md). + +**Exemple** + +Requête: + +``` sql +SELECT h3IndexesAreNeighbors(617420388351344639, 617420388352655359) AS n +``` + +Résultat: + +``` text +┌─n─┐ +│ 1 │ +└───┘ +``` + +## h3enfants {#h3tochildren} + +Retourne un tableau avec les index enfants de l'index donné. + +**Syntaxe** + +``` sql +h3ToChildren(index, resolution) +``` + +**Paramètre** + +- `index` — Hexagon index number. Type: [UInt64](../../data_types/int_uint.md). +- `resolution` — Index resolution. Range: `[0, 15]`. Type: [UInt8](../../data_types/int_uint.md). + +**Valeurs renvoyées** + +- Tableau avec les index H3 enfants. Tableau de type: [UInt64](../../data_types/int_uint.md). + +**Exemple** + +Requête: + +``` sql +SELECT h3ToChildren(599405990164561919, 6) AS children +``` + +Résultat: + +``` text +┌─children───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ [603909588852408319,603909588986626047,603909589120843775,603909589255061503,603909589389279231,603909589523496959,603909589657714687] │ +└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +``` + +## h3ToParent {#h3toparent} + +Renvoie l'index parent (plus grossier) contenant l'index donné. + +**Syntaxe** + +``` sql +h3ToParent(index, resolution) +``` + +**Paramètre** + +- `index` — Hexagon index number. Type: [UInt64](../../data_types/int_uint.md). +- `resolution` — Index resolution. Range: `[0, 15]`. Type: [UInt8](../../data_types/int_uint.md). + +**Valeurs renvoyées** + +- Parent H3 index. Type: [UInt64](../../data_types/int_uint.md). + +**Exemple** + +Requête: + +``` sql +SELECT h3ToParent(599405990164561919, 3) as parent +``` + +Résultat: + +``` text +┌─────────────parent─┐ +│ 590398848891879423 │ +└────────────────────┘ +``` + +## h3ToString {#h3tostring} + +Convertit la représentation H3Index de l'index en représentation de chaîne. + +``` sql +h3ToString(index) +``` + +**Paramètre** + +- `index` — Hexagon index number. Type: [UInt64](../../data_types/int_uint.md). + +**Valeurs renvoyées** + +- Représentation en chaîne de l'index H3. Type: [Chaîne](../../data_types/string.md). + +**Exemple** + +Requête: + +``` sql +SELECT h3ToString(617420388352917503) as h3_string +``` + +Résultat: + +``` text +┌─h3_string───────┐ +│ 89184926cdbffff │ +└─────────────────┘ +``` + +## stringToH3 {#stringtoh3} + +Convertit la représentation de chaîne en représentation H3Index (UInt64). + +``` sql +stringToH3(index_str) +``` + +**Paramètre** + +- `index_str` — String representation of the H3 index. Type: [Chaîne](../../data_types/string.md). + +**Valeurs renvoyées** + +- Numéro d'indice hexagonal. Renvoie 0 en cas d'erreur. Type: [UInt64](../../data_types/int_uint.md). + +**Exemple** + +Requête: + +``` sql +SELECT stringToH3('89184926cc3ffff') as index +``` + +Résultat: + +``` text +┌──────────────index─┐ +│ 617420388351344639 │ +└────────────────────┘ +``` + +## h3grésolution {#h3getresolution} + +Retourne la résolution de l'index. + +**Syntaxe** + +``` sql +h3GetResolution(index) +``` + +**Paramètre** + +- `index` — Hexagon index number. Type: [UInt64](../../data_types/int_uint.md). + +**Valeurs renvoyées** + +- L'indice de la résolution. Gamme: `[0, 15]`. Type: [UInt8](../../data_types/int_uint.md). + +**Exemple** + +Requête: + +``` sql +SELECT h3GetResolution(617420388352917503) as res +``` + +Résultat: + +``` text +┌─res─┐ +│ 9 │ +└─────┘ +``` + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/geo/) diff --git a/docs/fr/query_language/functions/hash_functions.md b/docs/fr/query_language/functions/hash_functions.md new file mode 100644 index 00000000000..82ea213fdcd --- /dev/null +++ b/docs/fr/query_language/functions/hash_functions.md @@ -0,0 +1,443 @@ +--- +machine_translated: true +--- + +# Les fonctions de hachage {#hash-functions} + +Les fonctions de hachage peuvent être utilisées pour le brassage pseudo-aléatoire déterministe des éléments. + +## halfMD5 {#hash-functions-halfmd5} + +[Interpréter](../../query_language/functions/type_conversion_functions.md#type_conversion_functions-reinterpretAsString) tous les paramètres d'entrée sous forme de chaînes et calcule le [MD5](https://en.wikipedia.org/wiki/MD5) la valeur de hachage pour chacun d'eux. Puis combine les hachages, prend les 8 premiers octets du hachage de la chaîne résultante, et les interprète comme `UInt64` dans l'ordre des octets big-endian. + +``` sql +halfMD5(par1, ...) +``` + +La fonction est relativement lente (5 millions de chaînes courtes par seconde par cœur de processeur). +Envisager l'utilisation de la [sipHash64](#hash_functions-siphash64) la fonction la place. + +**Paramètre** + +La fonction prend un nombre variable de paramètres d'entrée. Les paramètres peuvent être tout de la [types de données pris en charge](../../data_types/index.md). + +**Valeur Renvoyée** + +A [UInt64](../../data_types/int_uint.md) valeur de hachage du type de données. + +**Exemple** + +``` sql +SELECT halfMD5(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS halfMD5hash, toTypeName(halfMD5hash) AS type +``` + +``` text +┌────────halfMD5hash─┬─type───┐ +│ 186182704141653334 │ UInt64 │ +└────────────────────┴────────┘ +``` + +## MD5 {#hash_functions-md5} + +Calcule le MD5 à partir d'une chaîne et renvoie L'ensemble d'octets résultant en tant que FixedString(16). +Si vous n'avez pas besoin de MD5 en particulier, mais que vous avez besoin d'un hachage cryptographique 128 bits décent, utilisez le ‘sipHash128’ la fonction la place. +Si vous voulez obtenir le même résultat que la sortie de l'utilitaire md5sum, utilisez lower (hex(MD5 (s))). + +## sipHash64 {#hash_functions-siphash64} + +Produit un 64 bits [SipHash](https://131002.net/siphash/) la valeur de hachage. + +``` sql +sipHash64(par1,...) +``` + +C'est une fonction de hachage cryptographique. Il fonctionne au moins trois fois plus vite que le [MD5](#hash_functions-md5) fonction. + +Fonction [interpréter](../../query_language/functions/type_conversion_functions.md#type_conversion_functions-reinterpretAsString) tous les paramètres d'entrée sous forme de chaînes et calcule la valeur de hachage pour chacun d'eux. Puis combine les hachages par l'algorithme suivant: + +1. Après avoir haché tous les paramètres d'entrée, la fonction obtient le tableau de hachages. +2. La fonction prend le premier et le second éléments et calcule un hachage pour le tableau d'entre eux. +3. Ensuite, la fonction prend la valeur de hachage, calculée à l'étape précédente, et le troisième élément du tableau de hachage initial, et calcule un hachage pour le tableau d'entre eux. +4. L'étape précédente est répétée pour tous les éléments restants de la période initiale de hachage tableau. + +**Paramètre** + +La fonction prend un nombre variable de paramètres d'entrée. Les paramètres peuvent être tout de la [types de données pris en charge](../../data_types/index.md). + +**Valeur Renvoyée** + +A [UInt64](../../data_types/int_uint.md) valeur de hachage du type de données. + +**Exemple** + +``` sql +SELECT sipHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS SipHash, toTypeName(SipHash) AS type +``` + +``` text +┌──────────────SipHash─┬─type───┐ +│ 13726873534472839665 │ UInt64 │ +└──────────────────────┴────────┘ +``` + +## sipHash128 {#hash_functions-siphash128} + +Calcule SipHash à partir d'une chaîne. +Accepte un argument de type chaîne. Renvoie FixedString (16). +Diffère de sipHash64 en ce que l'état de pliage xor final n'est effectué que jusqu'à 128 bits. + +## cityHash64 {#cityhash64} + +Produit un 64 bits [CityHash](https://github.com/google/cityhash) la valeur de hachage. + +``` sql +cityHash64(par1,...) +``` + +Ceci est une fonction de hachage non cryptographique rapide. Il utilise L'algorithme CityHash pour les paramètres de chaîne et la fonction de hachage rapide non cryptographique spécifique à l'implémentation pour les paramètres avec d'autres types de données. La fonction utilise le combinateur CityHash pour obtenir les résultats finaux. + +**Paramètre** + +La fonction prend un nombre variable de paramètres d'entrée. Les paramètres peuvent être tout de la [types de données pris en charge](../../data_types/index.md). + +**Valeur Renvoyée** + +A [UInt64](../../data_types/int_uint.md) valeur de hachage du type de données. + +**Exemple** + +Appelez exemple: + +``` sql +SELECT cityHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS CityHash, toTypeName(CityHash) AS type +``` + +``` text +┌─────────────CityHash─┬─type───┐ +│ 12072650598913549138 │ UInt64 │ +└──────────────────────┴────────┘ +``` + +L'exemple suivant montre comment calculer la somme de l'ensemble de la table avec précision jusqu'à la ligne de commande: + +``` sql +SELECT groupBitXor(cityHash64(*)) FROM table +``` + +## intHash32 {#inthash32} + +Calcule un code de hachage 32 bits à partir de n'importe quel type d'entier. +C'est une fonction de hachage non cryptographique relativement rapide de qualité moyenne pour les nombres. + +## intHash64 {#inthash64} + +Calcule un code de hachage 64 bits à partir de n'importe quel type d'entier. +Il fonctionne plus vite que intHash32. Qualité moyenne. + +## SHA1 {#sha1} + +## SHA224 {#sha224} + +## SHA256 {#sha256} + +Calcule SHA-1, SHA-224 ou SHA-256 à partir d'une chaîne et renvoie l'ensemble d'octets résultant en tant que FixedString(20), FixedString(28) ou FixedString(32). +La fonction fonctionne assez lentement (SHA-1 traite environ 5 millions de chaînes courtes par seconde par cœur de processeur, tandis que SHA-224 et SHA-256 traitent environ 2,2 millions). +Nous vous recommandons d'utiliser cette fonction uniquement dans les cas où vous avez besoin d'une fonction de hachage spécifique et que vous ne pouvez pas la sélectionner. +Même dans ces cas, nous vous recommandons d'appliquer la fonction hors ligne et de pré-calculer les valeurs lors de leur insertion dans la table, au lieu de l'appliquer dans SELECTS. + +## URLHash(url \[, N\]) {#urlhashurl-n} + +Une fonction de hachage non cryptographique rapide et de qualité décente pour une chaîne obtenue à partir d'une URL en utilisant un type de normalisation. +`URLHash(s)` – Calculates a hash from a string without one of the trailing symbols `/`,`?` ou `#` à la fin, si elle est présente. +`URLHash(s, N)` – Calculates a hash from a string up to the N level in the URL hierarchy, without one of the trailing symbols `/`,`?` ou `#` à la fin, si elle est présente. +Les niveaux sont les mêmes que dans URLHierarchy. Cette fonction est spécifique à Yandex.Metrica. + +## farmHash64 {#farmhash64} + +Produit un 64 bits [FarmHash](https://github.com/google/farmhash) la valeur de hachage. + +``` sql +farmHash64(par1, ...) +``` + +La fonction utilise le `Hash64` la méthode de tous les [les méthodes disponibles](https://github.com/google/farmhash/blob/master/src/farmhash.h). + +**Paramètre** + +La fonction prend un nombre variable de paramètres d'entrée. Les paramètres peuvent être tout de la [types de données pris en charge](../../data_types/index.md). + +**Valeur Renvoyée** + +A [UInt64](../../data_types/int_uint.md) valeur de hachage du type de données. + +**Exemple** + +``` sql +SELECT farmHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS FarmHash, toTypeName(FarmHash) AS type +``` + +``` text +┌─────────────FarmHash─┬─type───┐ +│ 17790458267262532859 │ UInt64 │ +└──────────────────────┴────────┘ +``` + +## javaHash {#hash_functions-javahash} + +Calculer [JavaHash](http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/String.java#l1452) à partir d'une chaîne. Cette fonction de hachage n'est ni rapide ni de bonne qualité. La seule raison de l'utiliser est lorsque cet algorithme est déjà utilisé dans un autre système et que vous devez calculer exactement le même résultat. + +**Syntaxe** + +``` sql +SELECT javaHash(''); +``` + +**Valeur renvoyée** + +A `Int32` valeur de hachage du type de données. + +**Exemple** + +Requête: + +``` sql +SELECT javaHash('Hello, world!'); +``` + +Résultat: + +``` text +┌─javaHash('Hello, world!')─┐ +│ -1880044555 │ +└───────────────────────────┘ +``` + +## javaHashUTF16LE {#javahashutf16le} + +Calculer [JavaHash](http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/String.java#l1452) à partir d'une chaîne, en supposant qu'elle contient des octets représentant une chaîne en encodage UTF-16LE. + +**Syntaxe** + +``` sql +javaHashUTF16LE(stringUtf16le) +``` + +**Paramètre** + +- `stringUtf16le` — a string in UTF-16LE encoding. + +**Valeur renvoyée** + +A `Int32` valeur de hachage du type de données. + +**Exemple** + +Requête correcte avec une chaîne codée UTF-16LE. + +Requête: + +``` sql +SELECT javaHashUTF16LE(convertCharset('test', 'utf-8', 'utf-16le')) +``` + +Résultat: + +``` text +┌─javaHashUTF16LE(convertCharset('test', 'utf-8', 'utf-16le'))─┐ +│ 3556498 │ +└──────────────────────────────────────────────────────────────┘ +``` + +## hiveHash {#hash-functions-hivehash} + +Calculer `HiveHash` à partir d'une chaîne. + +``` sql +SELECT hiveHash(''); +``` + +C'est juste [JavaHash](#hash_functions-javahash) avec le bit de signe mis à zéro. Cette fonction est utilisée dans [Apache Hive](https://en.wikipedia.org/wiki/Apache_Hive) pour les versions antérieures à la version 3.0. Cette fonction de hachage n'est ni rapide ni de bonne qualité. La seule raison de l'utiliser est lorsque cet algorithme est déjà utilisé dans un autre système et que vous devez calculer exactement le même résultat. + +**Valeur renvoyée** + +A `Int32` valeur de hachage du type de données. + +Type: `hiveHash`. + +**Exemple** + +Requête: + +``` sql +SELECT hiveHash('Hello, world!'); +``` + +Résultat: + +``` text +┌─hiveHash('Hello, world!')─┐ +│ 267439093 │ +└───────────────────────────┘ +``` + +## metroHash64 {#metrohash64} + +Produit un 64 bits [MetroHash](http://www.jandrewrogers.com/2015/05/27/metrohash/) la valeur de hachage. + +``` sql +metroHash64(par1, ...) +``` + +**Paramètre** + +La fonction prend un nombre variable de paramètres d'entrée. Les paramètres peuvent être tout de la [types de données pris en charge](../../data_types/index.md). + +**Valeur Renvoyée** + +A [UInt64](../../data_types/int_uint.md) valeur de hachage du type de données. + +**Exemple** + +``` sql +SELECT metroHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MetroHash, toTypeName(MetroHash) AS type +``` + +``` text +┌────────────MetroHash─┬─type───┐ +│ 14235658766382344533 │ UInt64 │ +└──────────────────────┴────────┘ +``` + +## jumpConsistentHash {#jumpconsistenthash} + +Calcule JumpConsistentHash forme un UInt64. +Accepte deux arguments: une clé de type UInt64 et le nombre de compartiments. Renvoie Int32. +Pour plus d'informations, voir le lien: [JumpConsistentHash](https://arxiv.org/pdf/1406.2294.pdf) + +## murmurHash2\_32, murmurHash2\_64 {#murmurhash2-32-murmurhash2-64} + +Produit un [MurmurHash2](https://github.com/aappleby/smhasher) la valeur de hachage. + +``` sql +murmurHash2_32(par1, ...) +murmurHash2_64(par1, ...) +``` + +**Paramètre** + +Les deux fonctions prennent un nombre variable de paramètres d'entrée. Les paramètres peuvent être tout de la [types de données pris en charge](../../data_types/index.md). + +**Valeur Renvoyée** + +- Le `murmurHash2_32` fonction renvoie la valeur de hachage ayant le [UInt32](../../data_types/int_uint.md) type de données. +- Le `murmurHash2_64` fonction renvoie la valeur de hachage ayant le [UInt64](../../data_types/int_uint.md) type de données. + +**Exemple** + +``` sql +SELECT murmurHash2_64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash2, toTypeName(MurmurHash2) AS type +``` + +``` text +┌──────────MurmurHash2─┬─type───┐ +│ 11832096901709403633 │ UInt64 │ +└──────────────────────┴────────┘ +``` + +## murmurHash3\_32, murmurHash3\_64 {#murmurhash3-32-murmurhash3-64} + +Produit un [MurmurHash3](https://github.com/aappleby/smhasher) la valeur de hachage. + +``` sql +murmurHash3_32(par1, ...) +murmurHash3_64(par1, ...) +``` + +**Paramètre** + +Les deux fonctions prennent un nombre variable de paramètres d'entrée. Les paramètres peuvent être tout de la [types de données pris en charge](../../data_types/index.md). + +**Valeur Renvoyée** + +- Le `murmurHash3_32` la fonction retourne un [UInt32](../../data_types/int_uint.md) valeur de hachage du type de données. +- Le `murmurHash3_64` la fonction retourne un [UInt64](../../data_types/int_uint.md) valeur de hachage du type de données. + +**Exemple** + +``` sql +SELECT murmurHash3_32(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash3, toTypeName(MurmurHash3) AS type +``` + +``` text +┌─MurmurHash3─┬─type───┐ +│ 2152717 │ UInt32 │ +└─────────────┴────────┘ +``` + +## murmurHash3\_128 {#murmurhash3-128} + +Produit de 128 bits [MurmurHash3](https://github.com/aappleby/smhasher) la valeur de hachage. + +``` sql +murmurHash3_128( expr ) +``` + +**Paramètre** + +- `expr` — [Expression](../syntax.md#syntax-expressions) de retour d'un [Chaîne](../../data_types/string.md)-le type de la valeur. + +**Valeur Renvoyée** + +A [FixedString (16)](../../data_types/fixedstring.md) valeur de hachage du type de données. + +**Exemple** + +``` sql +SELECT murmurHash3_128('example_string') AS MurmurHash3, toTypeName(MurmurHash3) AS type +``` + +``` text +┌─MurmurHash3──────┬─type────────────┐ +│ 6�1�4"S5KT�~~q │ FixedString(16) │ +└──────────────────┴─────────────────┘ +``` + +## xxHash32, xxHash64 {#hash-functions-xxhash32} + +Calculer `xxHash` à partir d'une chaîne. Il est proposé en deux saveurs, 32 et 64 bits. + +``` sql +SELECT xxHash32(''); + +OR + +SELECT xxHash64(''); +``` + +**Valeur renvoyée** + +A `Uint32` ou `Uint64` valeur de hachage du type de données. + +Type: `xxHash`. + +**Exemple** + +Requête: + +``` sql +SELECT xxHash32('Hello, world!'); +``` + +Résultat: + +``` text +┌─xxHash32('Hello, world!')─┐ +│ 834093149 │ +└───────────────────────────┘ +``` + +**Voir Aussi** + +- [xxHash](http://cyan4973.github.io/xxHash/). + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/hash_functions/) diff --git a/docs/fr/query_language/functions/higher_order_functions.md b/docs/fr/query_language/functions/higher_order_functions.md new file mode 100644 index 00000000000..6abdb7d4280 --- /dev/null +++ b/docs/fr/query_language/functions/higher_order_functions.md @@ -0,0 +1,261 @@ +--- +machine_translated: true +--- + +# Fonctions d'ordre supérieur {#higher-order-functions} + +## `->` opérateur, fonction lambda (params, expr) {#operator-lambdaparams-expr-function} + +Allows describing a lambda function for passing to a higher-order function. The left side of the arrow has a formal parameter, which is any ID, or multiple formal parameters – any IDs in a tuple. The right side of the arrow has an expression that can use these formal parameters, as well as any table columns. + +Exemple: `x -> 2 * x, str -> str != Referer.` + +Les fonctions d'ordre supérieur ne peuvent accepter que les fonctions lambda comme argument fonctionnel. + +Une fonction lambda qui accepte plusieurs arguments peuvent être passés à une fonction d'ordre supérieur. Dans ce cas, la fonction d'ordre supérieur est passé plusieurs tableaux de longueur identique que ces arguments correspondent. + +Pour certaines fonctions, telles que [arrayCount](#higher_order_functions-array-count) ou [arraySum](#higher_order_functions-array-count) le premier argument (la fonction lambda) peut être omis. Dans ce cas, un mappage identique est supposé. + +Une fonction lambda ne peut pas être omise pour les fonctions suivantes: + +- [arrayMap](#higher_order_functions-array-map) +- [arrayFilter](#higher_order_functions-array-filter) +- [arrayFill](#higher_order_functions-array-fill) +- [arrayReverseFill](#higher_order_functions-array-reverse-fill) +- [arraySplit](#higher_order_functions-array-split) +- [arrayReverseSplit](#higher_order_functions-array-reverse-split) +- [arrayFirst](#higher_order_functions-array-first) +- [arrayFirstIndex](#higher_order_functions-array-first-index) + +### arrayMap(func, arr1, …) {#higher_order_functions-array-map} + +Renvoie un tableau obtenu à partir de l'application d'origine `func` fonction à chaque élément dans le `arr` tableau. + +Exemple: + +``` sql +SELECT arrayMap(x -> (x + 2), [1, 2, 3]) as res; +``` + +``` text +┌─res─────┐ +│ [3,4,5] │ +└─────────┘ +``` + +L'exemple suivant montre comment créer un n-uplet d'éléments de différents tableaux: + +``` sql +SELECT arrayMap((x, y) -> (x, y), [1, 2, 3], [4, 5, 6]) AS res +``` + +``` text +┌─res─────────────────┐ +│ [(1,4),(2,5),(3,6)] │ +└─────────────────────┘ +``` + +Notez que le premier argument (fonction lambda) ne peut pas être omis dans le `arrayMap` fonction. + +### arrayFilter(func, arr1, …) {#higher_order_functions-array-filter} + +Renvoie un tableau contenant uniquement les éléments `arr1` pour ce qui `func` retourne autre chose que 0. + +Exemple: + +``` sql +SELECT arrayFilter(x -> x LIKE '%World%', ['Hello', 'abc World']) AS res +``` + +``` text +┌─res───────────┐ +│ ['abc World'] │ +└───────────────┘ +``` + +``` sql +SELECT + arrayFilter( + (i, x) -> x LIKE '%World%', + arrayEnumerate(arr), + ['Hello', 'abc World'] AS arr) + AS res +``` + +``` text +┌─res─┐ +│ [2] │ +└─────┘ +``` + +Notez que le premier argument (fonction lambda) ne peut pas être omis dans le `arrayFilter` fonction. + +### arrayFill(func, arr1, …) {#higher_order_functions-array-fill} + +Analyse par le biais de `arr1` du premier élément au dernier élément et remplacer `arr1[i]` par `arr1[i - 1]` si `func` renvoie 0. Le premier élément de `arr1` ne sera pas remplacé. + +Exemple: + +``` sql +SELECT arrayFill(x -> not isNull(x), [1, null, 3, 11, 12, null, null, 5, 6, 14, null, null]) AS res +``` + +``` text +┌─res──────────────────────────────┐ +│ [1,1,3,11,12,12,12,5,6,14,14,14] │ +└──────────────────────────────────┘ +``` + +Notez que le premier argument (fonction lambda) ne peut pas être omis dans le `arrayFill` fonction. + +### arrayReverseFill(func, arr1, …) {#higher_order_functions-array-reverse-fill} + +Analyse par le biais de `arr1` du dernier élément au premier élément et remplacer `arr1[i]` par `arr1[i + 1]` si `func` renvoie 0. Le dernier élément de `arr1` ne sera pas remplacé. + +Exemple: + +``` sql +SELECT arrayReverseFill(x -> not isNull(x), [1, null, 3, 11, 12, null, null, 5, 6, 14, null, null]) AS res +``` + +``` text +┌─res────────────────────────────────┐ +│ [1,3,3,11,12,5,5,5,6,14,NULL,NULL] │ +└────────────────────────────────────┘ +``` + +Notez que le premier argument (fonction lambda) ne peut pas être omis dans le `arrayReverseFill` fonction. + +### arraySplit(func, arr1, …) {#higher_order_functions-array-split} + +Split `arr1` en plusieurs tableaux. Lorsque `func` retourne autre chose que 0, la matrice sera de split sur le côté gauche de l'élément. Le tableau ne sera pas partagé avant le premier élément. + +Exemple: + +``` sql +SELECT arraySplit((x, y) -> y, [1, 2, 3, 4, 5], [1, 0, 0, 1, 0]) AS res +``` + +``` text +┌─res─────────────┐ +│ [[1,2,3],[4,5]] │ +└─────────────────┘ +``` + +Notez que le premier argument (fonction lambda) ne peut pas être omis dans le `arraySplit` fonction. + +### arrayReverseSplit(func, arr1, …) {#higher_order_functions-array-reverse-split} + +Split `arr1` en plusieurs tableaux. Lorsque `func` retourne autre chose que 0, la matrice sera de split sur le côté droit de l'élément. Le tableau ne sera pas divisé après le dernier élément. + +Exemple: + +``` sql +SELECT arrayReverseSplit((x, y) -> y, [1, 2, 3, 4, 5], [1, 0, 0, 1, 0]) AS res +``` + +``` text +┌─res───────────────┐ +│ [[1],[2,3,4],[5]] │ +└───────────────────┘ +``` + +Notez que le premier argument (fonction lambda) ne peut pas être omis dans le `arraySplit` fonction. + +### arrayCount(\[func,\] arr1, …) {#higher_order_functions-array-count} + +Renvoie le nombre d'éléments dans l'arr tableau pour lequel func renvoie autre chose que 0. Si ‘func’ n'est pas spécifié, il renvoie le nombre d'éléments non nuls dans le tableau. + +### arrayExists(\[func,\] arr1, …) {#arrayexistsfunc-arr1} + +Renvoie 1 s'il existe au moins un élément ‘arr’ pour ce qui ‘func’ retourne autre chose que 0. Sinon, il renvoie 0. + +### arrayAll(\[func,\] arr1, …) {#arrayallfunc-arr1} + +Renvoie 1 si ‘func’ retourne autre chose que 0 pour tous les éléments de ‘arr’. Sinon, il renvoie 0. + +### arraySum(\[func,\] arr1, …) {#higher-order-functions-array-sum} + +Renvoie la somme de la ‘func’ valeur. Si la fonction est omise, elle retourne la somme des éléments du tableau. + +### arrayFirst(func, arr1, …) {#higher_order_functions-array-first} + +Renvoie le premier élément du ‘arr1’ tableau pour lequel ‘func’ retourne autre chose que 0. + +Notez que le premier argument (fonction lambda) ne peut pas être omis dans le `arrayFirst` fonction. + +### arrayFirstIndex(func, arr1, …) {#higher_order_functions-array-first-index} + +Renvoie l'index du premier élément de la ‘arr1’ tableau pour lequel ‘func’ retourne autre chose que 0. + +Notez que le premier argument (fonction lambda) ne peut pas être omis dans le `arrayFirstIndex` fonction. + +### arrayCumSum(\[func,\] arr1, …) {#arraycumsumfunc-arr1} + +Retourne un tableau des sommes partielles d'éléments dans le tableau source (une somme). Si l' `func` la fonction est spécifiée, les valeurs des éléments du tableau sont convertis par cette fonction avant l'addition. + +Exemple: + +``` sql +SELECT arrayCumSum([1, 1, 1, 1]) AS res +``` + +``` text +┌─res──────────┐ +│ [1, 2, 3, 4] │ +└──────────────┘ +``` + +### arrayCumSumNonNegative (arr) {#arraycumsumnonnegativearr} + +Même que `arrayCumSum`, renvoie un tableau des sommes partielles d'éléments dans le tableau source (une somme). Différent `arrayCumSum`, lorsque la valeur renvoyée contient une valeur inférieure à zéro, la valeur est remplacée par zéro et le calcul ultérieur est effectué avec des paramètres zéro. Exemple: + +``` sql +SELECT arrayCumSumNonNegative([1, 1, -4, 1]) AS res +``` + +``` text +┌─res───────┐ +│ [1,2,0,1] │ +└───────────┘ +``` + +### arraySort(\[func,\] arr1, …) {#arraysortfunc-arr1} + +Renvoie un tableau à la suite du tri des éléments de `arr1` dans l'ordre croissant. Si l' `func` la fonction est spécifiée, l'ordre de classement est déterminé par le résultat de la fonction `func` appliquée aux éléments du tableau (tableaux) + +Le [Transformation schwartzienne](https://en.wikipedia.org/wiki/Schwartzian_transform) est utilisé pour améliorer l'efficacité du tri. + +Exemple: + +``` sql +SELECT arraySort((x, y) -> y, ['hello', 'world'], [2, 1]); +``` + +``` text +┌─res────────────────┐ +│ ['world', 'hello'] │ +└────────────────────┘ +``` + +Pour plus d'informations sur la `arraySort` la méthode, voir l' [Fonctions pour travailler avec des tableaux](array_functions.md#array_functions-sort) section. + +### arrayReverseSort(\[func,\] arr1, …) {#arrayreversesortfunc-arr1} + +Renvoie un tableau à la suite du tri des éléments de `arr1` dans l'ordre décroissant. Si l' `func` la fonction est spécifiée, l'ordre de classement est déterminé par le résultat de la fonction `func` appliquée aux éléments du tableau (tableaux). + +Exemple: + +``` sql +SELECT arrayReverseSort((x, y) -> y, ['hello', 'world'], [2, 1]) as res; +``` + +``` text +┌─res───────────────┐ +│ ['hello','world'] │ +└───────────────────┘ +``` + +Pour plus d'informations sur la `arrayReverseSort` la méthode, voir l' [Fonctions pour travailler avec des tableaux](array_functions.md#array_functions-reverse-sort) section. + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/higher_order_functions/) diff --git a/docs/fr/query_language/functions/in_functions.md b/docs/fr/query_language/functions/in_functions.md new file mode 100644 index 00000000000..aa9b9b04e8c --- /dev/null +++ b/docs/fr/query_language/functions/in_functions.md @@ -0,0 +1,23 @@ +--- +machine_translated: true +--- + +# Fonctions pour la mise en œuvre de l'opérateur {#functions-for-implementing-the-in-operator} + +## in, notin, globalIn, globalNotIn {#in-functions} + +Voir la section [Dans les opérateurs](../select.md#select-in-operators). + +## tuple(x, y, …), operator (x, y, …) {#tuplex-y-operator-x-y} + +Une fonction qui permet de regrouper plusieurs colonnes. +For columns with the types T1, T2, …, it returns a Tuple(T1, T2, …) type tuple containing these columns. There is no cost to execute the function. +Les Tuples sont normalement utilisés comme valeurs intermédiaires pour un argument D'opérateurs IN, ou pour créer une liste de paramètres formels de fonctions lambda. Les Tuples ne peuvent pas être écrits sur une table. + +## tupleElement (tuple, n), opérateur X. N {#tupleelementtuple-n-operator-x-n} + +Une fonction qui permet d'obtenir une colonne à partir d'un tuple. +‘N’ est l'index de colonne, à partir de 1. N doit être une constante. ‘N’ doit être une constante. ‘N’ doit être un entier postif strict ne dépassant pas la taille du tuple. +Il n'y a aucun coût pour exécuter la fonction. + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/in_functions/) diff --git a/docs/fr/query_language/functions/index.md b/docs/fr/query_language/functions/index.md new file mode 100644 index 00000000000..717d0605656 --- /dev/null +++ b/docs/fr/query_language/functions/index.md @@ -0,0 +1,70 @@ +--- +machine_translated: true +--- + +# Fonction {#functions} + +Il y a au moins\* deux types de fonctions - des fonctions régulières (elles sont simplement appelées “functions”) and aggregate functions. These are completely different concepts. Regular functions work as if they are applied to each row separately (for each row, the result of the function doesn't depend on the other rows). Aggregate functions accumulate a set of values from various rows (i.e. they depend on the entire set of rows). + +Dans cette section, nous discutons des fonctions classiques. Pour les fonctions d'agrégation, voir la section “Aggregate functions”. + +\* - Il existe un troisième type de fonction ‘arrayJoin’ la fonction appartient à; les fonctions de table peuvent également être mentionnées séparément.\* + +## Typage fort {#strong-typing} + +Contrairement à SQL standard, ClickHouse a une forte typage. En d'autres termes, il ne fait pas de conversions implicites entre les types. Chaque fonction fonctionne pour un ensemble spécifique de types. Cela signifie que vous devez parfois utiliser des fonctions de conversion de type. + +## Élimination des sous-expressions courantes {#common-subexpression-elimination} + +Toutes les expressions d'une requête qui ont le même AST (le même enregistrement ou le même résultat d'analyse syntaxique) sont considérées comme ayant des valeurs identiques. De telles expressions sont concaténées et exécutées une fois. Les sous-requêtes identiques sont également éliminées de cette façon. + +## Types de résultats {#types-of-results} + +Toutes les fonctions renvoient un seul retour comme résultat (pas plusieurs valeurs, et pas des valeurs nulles). Le type de résultat est généralement défini uniquement par les types d'arguments, pas par les valeurs. Les Exceptions sont la fonction tupleElement (l'opérateur A. N) et la fonction toFixedString. + +## Constant {#constants} + +Pour simplifier, certaines fonctions ne peuvent fonctionner qu'avec des constantes pour certains arguments. Par exemple, le bon argument de L'opérateur LIKE doit être une constante. +Presque toutes les fonctions renvoient une constante pour des arguments constants. L'exception est les fonctions qui génèrent des nombres aléatoires. +Le ‘now’ function renvoie des valeurs différentes pour les requêtes qui ont été exécutées à des moments différents, mais le résultat est considéré comme une constante, car la constance n'est importante que dans une seule requête. +Une expression constante est également considérée comme une constante (par exemple, la moitié droite de L'opérateur LIKE peut être construite à partir de plusieurs constantes). + +Les fonctions peuvent être implémentées de différentes manières pour des arguments constants et non constants (un code différent est exécuté). Mais les résultats pour une constante et pour une colonne vraie Ne contenant que la même valeur doivent correspondre les uns aux autres. + +## Le traitement NULL {#null-processing} + +Les fonctions ont les comportements suivants: + +- Si au moins l'un des arguments de la fonction est `NULL` le résultat de la fonction est également `NULL`. +- Comportement spécial spécifié individuellement dans la description de chaque fonction. Dans le code source de ClickHouse, ces fonctions ont `UseDefaultImplementationForNulls=false`. + +## Constance {#constancy} + +Functions can't change the values of their arguments – any changes are returned as the result. Thus, the result of calculating separate functions does not depend on the order in which the functions are written in the query. + +## Erreur de manipulation {#error-handling} + +Certaines fonctions peuvent lancer une exception si les données ne sont pas valides. Dans ce cas, la requête est annulée et un message d'erreur est retourné au client. Pour le traitement distribué, lorsqu'une exception se produit sur l'un des serveurs, les autres serveurs aussi tenté d'interrompre la requête. + +## Évaluation des expressions d'argument {#evaluation-of-argument-expressions} + +Dans presque tous les langages de programmation, l'un des arguments peut pas être évalué pour certains opérateurs. Ce sont généralement les opérateurs `&&`, `||`, et `?:`. +Mais dans ClickHouse, les arguments des fonctions (opérateurs) sont toujours évalués. En effet, des parties entières de colonnes sont évaluées à la fois, au lieu de calculer chaque ligne séparément. + +## Exécution de fonctions pour le traitement de requêtes distribuées {#performing-functions-for-distributed-query-processing} + +Pour le traitement de requête distribué, autant d'étapes de traitement de requête que possible sont effectuées sur des serveurs distants, et le reste des étapes (fusion des résultats intermédiaires et tout ce qui suit) sont effectuées sur le serveur demandeur. + +Cela signifie que les fonctions peuvent être effectuées sur différents serveurs. +Par exemple, dans la requête `SELECT f(sum(g(x))) FROM distributed_table GROUP BY h(y),` + +- si un `distributed_table` a au moins deux fragments, les fonctions ‘g’ et ‘h’ sont effectuées sur des serveurs distants, et la fonction ‘f’ est effectuée sur le serveur demandeur. +- si un `distributed_table` a un seul fragment, tous les ‘f’, ‘g’, et ‘h’ les fonctions sont exécutées sur le serveur de ce fragment. + +Le résultat d'une fonction habituellement ne dépendent pas le serveur sur lequel elle est exécutée. Cependant, parfois c'est important. +Par exemple, les fonctions qui fonctionnent avec des dictionnaires utilisent le dictionnaire qui existe sur le serveur sur lequel elles s'exécutent. +Un autre exemple est l' `hostName` fonction, qui renvoie le nom du serveur sur lequel il s'exécute afin de `GROUP BY` par les serveurs dans un `SELECT` requête. + +Si une fonction dans une requête est effectuée sur le demandeur serveur, mais vous devez l'exécuter sur des serveurs distants, vous pouvez l'envelopper dans un ‘any’ fonction d'agrégation ou l'ajouter à une clé dans `GROUP BY`. + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/) diff --git a/docs/fr/query_language/functions/introspection.md b/docs/fr/query_language/functions/introspection.md new file mode 100644 index 00000000000..e724c155d51 --- /dev/null +++ b/docs/fr/query_language/functions/introspection.md @@ -0,0 +1,307 @@ +--- +machine_translated: true +--- + +# Fonctions D'Introspection {#introspection-functions} + +Vous pouvez utiliser les fonctions décrites dans ce chapitre pour introspecter [ELF](https://en.wikipedia.org/wiki/Executable_and_Linkable_Format) et [DWARF](https://en.wikipedia.org/wiki/DWARF) pour le profilage de requête. + +!!! warning "Avertissement" + Ces fonctions sont lentes et peuvent imposer des considérations de sécurité. + +Pour le bon fonctionnement des fonctions d'introspection: + +- Installer le `clickhouse-common-static-dbg` paquet. + +- Définir le [allow\_introspection\_functions](../../operations/settings/settings.md#settings-allow_introspection_functions) réglage sur 1. + + For security reasons introspection functions are disabled by default. + +Clickhouse enregistre les rapports du profileur [trace\_log](../../operations/system_tables.md#system_tables-trace_log) système de table. Assurez-vous que la table et le profileur sont correctement configurés. + +## addressToLine {#addresstoline} + +Convertit l'adresse de mémoire virtuelle dans le processus de serveur ClickHouse en nom de fichier et en numéro de ligne dans le code source de ClickHouse. + +Si vous utilisez des paquets clickhouse officiels, vous devez installer le `clickhouse-common-static-dbg` paquet. + +**Syntaxe** + +``` sql +addressToLine(address_of_binary_instruction) +``` + +**Paramètre** + +- `address_of_binary_instruction` ([UInt64](../../data_types/int_uint.md)) — Address of instruction in a running process. + +**Valeur renvoyée** + +- Nom de fichier du code Source et le numéro de ligne dans ce fichier délimité par deux-points. + + For example, `/build/obj-x86_64-linux-gnu/../dbms/src/Common/ThreadPool.cpp:199`, where `199` is a line number. + +- Nom d'un binaire, si la fonction n'a pas pu trouver les informations de débogage. + +- Chaîne vide, si l'adresse n'est pas valide. + +Type: [Chaîne](../../data_types/string.md). + +**Exemple** + +Activation des fonctions d'introspection: + +``` sql +SET allow_introspection_functions=1 +``` + +Sélection de la première chaîne de `trace_log` système de table: + +``` sql +SELECT * FROM system.trace_log LIMIT 1 \G +``` + +``` text +Row 1: +────── +event_date: 2019-11-19 +event_time: 2019-11-19 18:57:23 +revision: 54429 +timer_type: Real +thread_number: 48 +query_id: 421b6855-1858-45a5-8f37-f383409d6d72 +trace: [140658411141617,94784174532828,94784076370703,94784076372094,94784076361020,94784175007680,140658411116251,140658403895439] +``` + +Le `trace` champ contient la trace de pile au moment de l'échantillonnage. + +Obtenir le nom de fichier du code source et le numéro de ligne pour une seule adresse: + +``` sql +SELECT addressToLine(94784076370703) \G +``` + +``` text +Row 1: +────── +addressToLine(94784076370703): /build/obj-x86_64-linux-gnu/../dbms/src/Common/ThreadPool.cpp:199 +``` + +Application de la fonction à la trace de la pile entière: + +``` sql +SELECT + arrayStringConcat(arrayMap(x -> addressToLine(x), trace), '\n') AS trace_source_code_lines +FROM system.trace_log +LIMIT 1 +\G +``` + +Le [arrayMap](higher_order_functions.md#higher_order_functions-array-map) permet de traiter chaque élément individuel de l' `trace` tableau par la `addressToLine` fonction. Le résultat de ce traitement que vous voyez dans l' `trace_source_code_lines` colonne de sortie. + +``` text +Row 1: +────── +trace_source_code_lines: /lib/x86_64-linux-gnu/libpthread-2.27.so +/usr/lib/debug/usr/bin/clickhouse +/build/obj-x86_64-linux-gnu/../dbms/src/Common/ThreadPool.cpp:199 +/build/obj-x86_64-linux-gnu/../dbms/src/Common/ThreadPool.h:155 +/usr/include/c++/9/bits/atomic_base.h:551 +/usr/lib/debug/usr/bin/clickhouse +/lib/x86_64-linux-gnu/libpthread-2.27.so +/build/glibc-OTsEL5/glibc-2.27/misc/../sysdeps/unix/sysv/linux/x86_64/clone.S:97 +``` + +## adressetosymbol {#addresstosymbol} + +Convertit l'adresse de mémoire virtuelle dans le processus de serveur ClickHouse en symbole à partir des fichiers d'objets ClickHouse. + +**Syntaxe** + +``` sql +addressToSymbol(address_of_binary_instruction) +``` + +**Paramètre** + +- `address_of_binary_instruction` ([UInt64](../../data_types/int_uint.md)) — Address of instruction in a running process. + +**Valeur renvoyée** + +- Symbole des fichiers D'objets ClickHouse. +- Chaîne vide, si l'adresse n'est pas valide. + +Type: [Chaîne](../../data_types/string.md). + +**Exemple** + +Activation des fonctions d'introspection: + +``` sql +SET allow_introspection_functions=1 +``` + +Sélection de la première chaîne de `trace_log` système de table: + +``` sql +SELECT * FROM system.trace_log LIMIT 1 \G +``` + +``` text +Row 1: +────── +event_date: 2019-11-20 +event_time: 2019-11-20 16:57:59 +revision: 54429 +timer_type: Real +thread_number: 48 +query_id: 724028bf-f550-45aa-910d-2af6212b94ac +trace: [94138803686098,94138815010911,94138815096522,94138815101224,94138815102091,94138814222988,94138806823642,94138814457211,94138806823642,94138814457211,94138806823642,94138806795179,94138806796144,94138753770094,94138753771646,94138753760572,94138852407232,140399185266395,140399178045583] +``` + +Le `trace` champ contient la trace de pile au moment de l'échantillonnage. + +Obtenir un symbole pour une seule adresse: + +``` sql +SELECT addressToSymbol(94138803686098) \G +``` + +``` text +Row 1: +────── +addressToSymbol(94138803686098): _ZNK2DB24IAggregateFunctionHelperINS_20AggregateFunctionSumImmNS_24AggregateFunctionSumDataImEEEEE19addBatchSinglePlaceEmPcPPKNS_7IColumnEPNS_5ArenaE +``` + +Application de la fonction à la trace de la pile entière: + +``` sql +SELECT + arrayStringConcat(arrayMap(x -> addressToSymbol(x), trace), '\n') AS trace_symbols +FROM system.trace_log +LIMIT 1 +\G +``` + +Le [arrayMap](higher_order_functions.md#higher_order_functions-array-map) permet de traiter chaque élément individuel de l' `trace` tableau par la `addressToSymbols` fonction. Le résultat de ce traitement que vous voyez dans l' `trace_symbols` colonne de sortie. + +``` text +Row 1: +────── +trace_symbols: _ZNK2DB24IAggregateFunctionHelperINS_20AggregateFunctionSumImmNS_24AggregateFunctionSumDataImEEEEE19addBatchSinglePlaceEmPcPPKNS_7IColumnEPNS_5ArenaE +_ZNK2DB10Aggregator21executeWithoutKeyImplERPcmPNS0_28AggregateFunctionInstructionEPNS_5ArenaE +_ZN2DB10Aggregator14executeOnBlockESt6vectorIN3COWINS_7IColumnEE13immutable_ptrIS3_EESaIS6_EEmRNS_22AggregatedDataVariantsERS1_IPKS3_SaISC_EERS1_ISE_SaISE_EERb +_ZN2DB10Aggregator14executeOnBlockERKNS_5BlockERNS_22AggregatedDataVariantsERSt6vectorIPKNS_7IColumnESaIS9_EERS6_ISB_SaISB_EERb +_ZN2DB10Aggregator7executeERKSt10shared_ptrINS_17IBlockInputStreamEERNS_22AggregatedDataVariantsE +_ZN2DB27AggregatingBlockInputStream8readImplEv +_ZN2DB17IBlockInputStream4readEv +_ZN2DB26ExpressionBlockInputStream8readImplEv +_ZN2DB17IBlockInputStream4readEv +_ZN2DB26ExpressionBlockInputStream8readImplEv +_ZN2DB17IBlockInputStream4readEv +_ZN2DB28AsynchronousBlockInputStream9calculateEv +_ZNSt17_Function_handlerIFvvEZN2DB28AsynchronousBlockInputStream4nextEvEUlvE_E9_M_invokeERKSt9_Any_data +_ZN14ThreadPoolImplI20ThreadFromGlobalPoolE6workerESt14_List_iteratorIS0_E +_ZZN20ThreadFromGlobalPoolC4IZN14ThreadPoolImplIS_E12scheduleImplIvEET_St8functionIFvvEEiSt8optionalImEEUlvE1_JEEEOS4_DpOT0_ENKUlvE_clEv +_ZN14ThreadPoolImplISt6threadE6workerESt14_List_iteratorIS0_E +execute_native_thread_routine +start_thread +clone +``` + +## demangle {#demangle} + +Convertit un symbole que vous pouvez obtenir en utilisant le [adressetosymbol](#addresstosymbol) fonction au nom de la fonction c++. + +**Syntaxe** + +``` sql +demangle(symbol) +``` + +**Paramètre** + +- `symbol` ([Chaîne](../../data_types/string.md)) — Symbol from an object file. + +**Valeur renvoyée** + +- Nom de la fonction C++. +- Chaîne vide si un symbole n'est pas valide. + +Type: [Chaîne](../../data_types/string.md). + +**Exemple** + +Activation des fonctions d'introspection: + +``` sql +SET allow_introspection_functions=1 +``` + +Sélection de la première chaîne de `trace_log` système de table: + +``` sql +SELECT * FROM system.trace_log LIMIT 1 \G +``` + +``` text +Row 1: +────── +event_date: 2019-11-20 +event_time: 2019-11-20 16:57:59 +revision: 54429 +timer_type: Real +thread_number: 48 +query_id: 724028bf-f550-45aa-910d-2af6212b94ac +trace: [94138803686098,94138815010911,94138815096522,94138815101224,94138815102091,94138814222988,94138806823642,94138814457211,94138806823642,94138814457211,94138806823642,94138806795179,94138806796144,94138753770094,94138753771646,94138753760572,94138852407232,140399185266395,140399178045583] +``` + +Le `trace` champ contient la trace de pile au moment de l'échantillonnage. + +Obtenir un nom de fonction pour une seule adresse: + +``` sql +SELECT demangle(addressToSymbol(94138803686098)) \G +``` + +``` text +Row 1: +────── +demangle(addressToSymbol(94138803686098)): DB::IAggregateFunctionHelper > >::addBatchSinglePlace(unsigned long, char*, DB::IColumn const**, DB::Arena*) const +``` + +Application de la fonction à la trace de la pile entière: + +``` sql +SELECT + arrayStringConcat(arrayMap(x -> demangle(addressToSymbol(x)), trace), '\n') AS trace_functions +FROM system.trace_log +LIMIT 1 +\G +``` + +Le [arrayMap](higher_order_functions.md#higher_order_functions-array-map) permet de traiter chaque élément individuel de l' `trace` tableau par la `demangle` fonction. Le résultat de ce traitement que vous voyez dans l' `trace_functions` colonne de sortie. + +``` text +Row 1: +────── +trace_functions: DB::IAggregateFunctionHelper > >::addBatchSinglePlace(unsigned long, char*, DB::IColumn const**, DB::Arena*) const +DB::Aggregator::executeWithoutKeyImpl(char*&, unsigned long, DB::Aggregator::AggregateFunctionInstruction*, DB::Arena*) const +DB::Aggregator::executeOnBlock(std::vector::immutable_ptr, std::allocator::immutable_ptr > >, unsigned long, DB::AggregatedDataVariants&, std::vector >&, std::vector >, std::allocator > > >&, bool&) +DB::Aggregator::executeOnBlock(DB::Block const&, DB::AggregatedDataVariants&, std::vector >&, std::vector >, std::allocator > > >&, bool&) +DB::Aggregator::execute(std::shared_ptr const&, DB::AggregatedDataVariants&) +DB::AggregatingBlockInputStream::readImpl() +DB::IBlockInputStream::read() +DB::ExpressionBlockInputStream::readImpl() +DB::IBlockInputStream::read() +DB::ExpressionBlockInputStream::readImpl() +DB::IBlockInputStream::read() +DB::AsynchronousBlockInputStream::calculate() +std::_Function_handler::_M_invoke(std::_Any_data const&) +ThreadPoolImpl::worker(std::_List_iterator) +ThreadFromGlobalPool::ThreadFromGlobalPool::scheduleImpl(std::function, int, std::optional)::{lambda()#3}>(ThreadPoolImpl::scheduleImpl(std::function, int, std::optional)::{lambda()#3}&&)::{lambda()#1}::operator()() const +ThreadPoolImpl::worker(std::_List_iterator) +execute_native_thread_routine +start_thread +clone +``` diff --git a/docs/fr/query_language/functions/ip_address_functions.md b/docs/fr/query_language/functions/ip_address_functions.md new file mode 100644 index 00000000000..f9541e7d247 --- /dev/null +++ b/docs/fr/query_language/functions/ip_address_functions.md @@ -0,0 +1,245 @@ +--- +machine_translated: true +--- + +# Fonctions pour travailler avec des adresses IP {#functions-for-working-with-ip-addresses} + +## IPv4NumToString (num) {#ipv4numtostringnum} + +Prend un numéro UInt32. Interprète comme une adresse IPv4 dans big endian. Renvoie une chaîne contenant l'adresse IPv4 correspondante au format A. B. C. d (Nombres séparés par des points sous forme décimale). + +## IPv4StringToNum (s) {#ipv4stringtonums} + +La fonction inverse de IPv4NumToString. Si L'adresse IPv4 a un format non valide, elle renvoie 0. + +## IPv4NumToStringClassC(num) {#ipv4numtostringclasscnum} + +Similaire à IPv4NumToString, mais en utilisant xxx au lieu du dernier octet. + +Exemple: + +``` sql +SELECT + IPv4NumToStringClassC(ClientIP) AS k, + count() AS c +FROM test.hits +GROUP BY k +ORDER BY c DESC +LIMIT 10 +``` + +``` text +┌─k──────────────┬─────c─┐ +│ 83.149.9.xxx │ 26238 │ +│ 217.118.81.xxx │ 26074 │ +│ 213.87.129.xxx │ 25481 │ +│ 83.149.8.xxx │ 24984 │ +│ 217.118.83.xxx │ 22797 │ +│ 78.25.120.xxx │ 22354 │ +│ 213.87.131.xxx │ 21285 │ +│ 78.25.121.xxx │ 20887 │ +│ 188.162.65.xxx │ 19694 │ +│ 83.149.48.xxx │ 17406 │ +└────────────────┴───────┘ +``` + +Depuis l'utilisation de ‘xxx’ est très inhabituel, cela peut être changé à l'avenir. Nous vous recommandons de ne pas compter sur le format exact de ce fragment. + +### IPv6NumToString (x) {#ipv6numtostringx} + +Accepte une valeur FixedString (16) contenant L'adresse IPv6 au format binaire. Renvoie une chaîne contenant cette adresse au format texte. +Les adresses IPv4 mappées IPv6 sont sorties au format:: ffff: 111.222.33.44. Exemple: + +``` sql +SELECT IPv6NumToString(toFixedString(unhex('2A0206B8000000000000000000000011'), 16)) AS addr +``` + +``` text +┌─addr─────────┐ +│ 2a02:6b8::11 │ +└──────────────┘ +``` + +``` sql +SELECT + IPv6NumToString(ClientIP6 AS k), + count() AS c +FROM hits_all +WHERE EventDate = today() AND substring(ClientIP6, 1, 12) != unhex('00000000000000000000FFFF') +GROUP BY k +ORDER BY c DESC +LIMIT 10 +``` + +``` text +┌─IPv6NumToString(ClientIP6)──────────────┬─────c─┐ +│ 2a02:2168:aaa:bbbb::2 │ 24695 │ +│ 2a02:2698:abcd:abcd:abcd:abcd:8888:5555 │ 22408 │ +│ 2a02:6b8:0:fff::ff │ 16389 │ +│ 2a01:4f8:111:6666::2 │ 16016 │ +│ 2a02:2168:888:222::1 │ 15896 │ +│ 2a01:7e00::ffff:ffff:ffff:222 │ 14774 │ +│ 2a02:8109:eee:ee:eeee:eeee:eeee:eeee │ 14443 │ +│ 2a02:810b:8888:888:8888:8888:8888:8888 │ 14345 │ +│ 2a02:6b8:0:444:4444:4444:4444:4444 │ 14279 │ +│ 2a01:7e00::ffff:ffff:ffff:ffff │ 13880 │ +└─────────────────────────────────────────┴───────┘ +``` + +``` sql +SELECT + IPv6NumToString(ClientIP6 AS k), + count() AS c +FROM hits_all +WHERE EventDate = today() +GROUP BY k +ORDER BY c DESC +LIMIT 10 +``` + +``` text +┌─IPv6NumToString(ClientIP6)─┬──────c─┐ +│ ::ffff:94.26.111.111 │ 747440 │ +│ ::ffff:37.143.222.4 │ 529483 │ +│ ::ffff:5.166.111.99 │ 317707 │ +│ ::ffff:46.38.11.77 │ 263086 │ +│ ::ffff:79.105.111.111 │ 186611 │ +│ ::ffff:93.92.111.88 │ 176773 │ +│ ::ffff:84.53.111.33 │ 158709 │ +│ ::ffff:217.118.11.22 │ 154004 │ +│ ::ffff:217.118.11.33 │ 148449 │ +│ ::ffff:217.118.11.44 │ 148243 │ +└────────────────────────────┴────────┘ +``` + +## IPv6StringToNum (s) {#ipv6stringtonums} + +La fonction inverse de IPv6NumToString. Si L'adresse IPv6 a un format non valide, elle renvoie une chaîne d'octets null. +HEX peut être en majuscules ou en minuscules. + +## IPv4ToIPv6 (x) {#ipv4toipv6x} + +Prend un `UInt32` nombre. Interprète comme une adresse IPv4 dans [big endian](https://en.wikipedia.org/wiki/Endianness). Retourne un `FixedString(16)` valeur contenant l'adresse IPv6 au format binaire. Exemple: + +``` sql +SELECT IPv6NumToString(IPv4ToIPv6(IPv4StringToNum('192.168.0.1'))) AS addr +``` + +``` text +┌─addr───────────────┐ +│ ::ffff:192.168.0.1 │ +└────────────────────┘ +``` + +## cutIPv6 (x, bitsToCutForIPv6, bitsToCutForIPv4) {#cutipv6x-bitstocutforipv6-bitstocutforipv4} + +Accepte une valeur FixedString (16) contenant L'adresse IPv6 au format binaire. Renvoie une chaîne contenant l'adresse du nombre spécifié de bits retiré au format texte. Exemple: + +``` sql +WITH + IPv6StringToNum('2001:0DB8:AC10:FE01:FEED:BABE:CAFE:F00D') AS ipv6, + IPv4ToIPv6(IPv4StringToNum('192.168.0.1')) AS ipv4 +SELECT + cutIPv6(ipv6, 2, 0), + cutIPv6(ipv4, 0, 2) +``` + +``` text +┌─cutIPv6(ipv6, 2, 0)─────────────────┬─cutIPv6(ipv4, 0, 2)─┐ +│ 2001:db8:ac10:fe01:feed:babe:cafe:0 │ ::ffff:192.168.0.0 │ +└─────────────────────────────────────┴─────────────────────┘ +``` + +## Ipv4cirtorange (ipv4, cidr), {#ipv4cidrtorangeipv4-cidr} + +Accepte un IPv4 et une valeur UInt8 contenant [CIDR](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing). Renvoie un tuple avec deux IPv4 contenant la plage inférieure et la plage supérieure du sous-réseau. + +``` sql +SELECT IPv4CIDRToRange(toIPv4('192.168.5.2'), 16) +``` + +``` text +┌─IPv4CIDRToRange(toIPv4('192.168.5.2'), 16)─┐ +│ ('192.168.0.0','192.168.255.255') │ +└────────────────────────────────────────────┘ +``` + +## Ipv6cirtorange (ipv6, cidr), {#ipv6cidrtorangeipv6-cidr} + +Accepte un IPv6 et une valeur UInt8 contenant le CIDR. Renvoie un tuple avec deux IPv6 contenant la plage inférieure et la plage supérieure du sous-réseau. + +``` sql +SELECT IPv6CIDRToRange(toIPv6('2001:0db8:0000:85a3:0000:0000:ac1f:8001'), 32); +``` + +``` text +┌─IPv6CIDRToRange(toIPv6('2001:0db8:0000:85a3:0000:0000:ac1f:8001'), 32)─┐ +│ ('2001:db8::','2001:db8:ffff:ffff:ffff:ffff:ffff:ffff') │ +└────────────────────────────────────────────────────────────────────────┘ +``` + +## toipv4 (chaîne) {#toipv4string} + +Un alias `IPv4StringToNum()` cela prend une forme de chaîne D'adresse IPv4 et renvoie la valeur de [IPv4](../../data_types/domains/ipv4.md) type, qui est binaire égal à la valeur renvoyée par `IPv4StringToNum()`. + +``` sql +WITH + '171.225.130.45' as IPv4_string +SELECT + toTypeName(IPv4StringToNum(IPv4_string)), + toTypeName(toIPv4(IPv4_string)) +``` + +``` text +┌─toTypeName(IPv4StringToNum(IPv4_string))─┬─toTypeName(toIPv4(IPv4_string))─┐ +│ UInt32 │ IPv4 │ +└──────────────────────────────────────────┴─────────────────────────────────┘ +``` + +``` sql +WITH + '171.225.130.45' as IPv4_string +SELECT + hex(IPv4StringToNum(IPv4_string)), + hex(toIPv4(IPv4_string)) +``` + +``` text +┌─hex(IPv4StringToNum(IPv4_string))─┬─hex(toIPv4(IPv4_string))─┐ +│ ABE1822D │ ABE1822D │ +└───────────────────────────────────┴──────────────────────────┘ +``` + +## toipv6 (chaîne) {#toipv6string} + +Un alias `IPv6StringToNum()` cela prend une forme de chaîne D'adresse IPv6 et renvoie la valeur de [IPv6](../../data_types/domains/ipv6.md) type, qui est binaire égal à la valeur renvoyée par `IPv6StringToNum()`. + +``` sql +WITH + '2001:438:ffff::407d:1bc1' as IPv6_string +SELECT + toTypeName(IPv6StringToNum(IPv6_string)), + toTypeName(toIPv6(IPv6_string)) +``` + +``` text +┌─toTypeName(IPv6StringToNum(IPv6_string))─┬─toTypeName(toIPv6(IPv6_string))─┐ +│ FixedString(16) │ IPv6 │ +└──────────────────────────────────────────┴─────────────────────────────────┘ +``` + +``` sql +WITH + '2001:438:ffff::407d:1bc1' as IPv6_string +SELECT + hex(IPv6StringToNum(IPv6_string)), + hex(toIPv6(IPv6_string)) +``` + +``` text +┌─hex(IPv6StringToNum(IPv6_string))─┬─hex(toIPv6(IPv6_string))─────────┐ +│ 20010438FFFF000000000000407D1BC1 │ 20010438FFFF000000000000407D1BC1 │ +└───────────────────────────────────┴──────────────────────────────────┘ +``` + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/ip_address_functions/) diff --git a/docs/fr/query_language/functions/json_functions.md b/docs/fr/query_language/functions/json_functions.md new file mode 100644 index 00000000000..137df62dfce --- /dev/null +++ b/docs/fr/query_language/functions/json_functions.md @@ -0,0 +1,228 @@ +--- +machine_translated: true +--- + +# Fonctions pour travailler avec JSON {#functions-for-working-with-json} + +Dans Yandex.Metrica, JSON est transmis par les utilisateurs en tant que paramètres de session. Il y a quelques fonctions spéciales pour travailler avec ce JSON. (Bien que dans la plupart des cas, les JSONs soient en outre prétraités et les valeurs résultantes sont placées dans des colonnes séparées dans leur format traité.) Toutes ces fonctions sont basées sur des hypothèses fortes sur ce que le JSON peut être, mais elles essaient de faire le moins possible pour faire le travail. + +Les hypothèses suivantes sont apportées: + +1. Le nom du champ (argument de fonction) doit être une constante. +2. Le nom du champ est en quelque sorte codé canoniquement dans JSON. Exemple: `visitParamHas('{"abc":"def"}', 'abc') = 1`, mais `visitParamHas('{"\\u0061\\u0062\\u0063":"def"}', 'abc') = 0` +3. Les champs sont recherchés à n'importe quel niveau d'imbrication, sans discrimination. S'il y a plusieurs champs correspondants, la première occurrence est utilisé. +4. Le JSON n'a pas de caractères d'espace en dehors des littéraux de chaîne. + +## visitParamHas(params, nom) {#visitparamhasparams-name} + +Vérifie s'il existe un champ avec ‘name’ nom. + +## visitParamExtractUInt(params, nom) {#visitparamextractuintparams-name} + +Analyse UInt64 à partir de la valeur du champ nommé ‘name’. Si c'est un champ de type chaîne, il tente d'analyser un numéro à partir du début de la chaîne. Si le champ n'existe pas, ou s'il existe mais ne contient pas de nombre, il renvoie 0. + +## visitParamExtractInt(params, name) {#visitparamextractintparams-name} + +Le même que pour Int64. + +## visitParamExtractFloat(params, nom) {#visitparamextractfloatparams-name} + +Le même que pour Float64. + +## visitParamExtractBool(params, nom) {#visitparamextractboolparams-name} + +Analyse d'une valeur vrai/faux. Le résultat est UInt8. + +## visitParamExtractRaw(params, nom) {#visitparamextractrawparams-name} + +Retourne la valeur d'un champ, y compris les séparateurs. + +Exemple: + +``` sql +visitParamExtractRaw('{"abc":"\\n\\u0000"}', 'abc') = '"\\n\\u0000"' +visitParamExtractRaw('{"abc":{"def":[1,2,3]}}', 'abc') = '{"def":[1,2,3]}' +``` + +## visitParamExtractString(params, nom) {#visitparamextractstringparams-name} + +Analyse la chaîne entre guillemets doubles. La valeur est sans échappement. Si l'échappement échoue, il renvoie une chaîne vide. + +Exemple: + +``` sql +visitParamExtractString('{"abc":"\\n\\u0000"}', 'abc') = '\n\0' +visitParamExtractString('{"abc":"\\u263a"}', 'abc') = '☺' +visitParamExtractString('{"abc":"\\u263"}', 'abc') = '' +visitParamExtractString('{"abc":"hello}', 'abc') = '' +``` + +Il n'y a actuellement aucun support pour les points de code dans le format `\uXXXX\uYYYY` qui ne proviennent pas du plan multilingue de base (ils sont convertis en CESU-8 au lieu de UTF-8). + +Les fonctions suivantes sont basées sur [simdjson](https://github.com/lemire/simdjson) conçu pour des exigences D'analyse JSON plus complexes. L'hypothèse 2 mentionnée ci-dessus s'applique toujours. + +## isValidJSON (json) {#isvalidjsonjson} + +Vérifie que la chaîne est un json valide. + +Exemple: + +``` sql +SELECT isValidJSON('{"a": "hello", "b": [-100, 200.0, 300]}') = 1 +SELECT isValidJSON('not a json') = 0 +``` + +## JSONHas(json\[, indices\_or\_keys\]…) {#jsonhasjson-indices-or-keys} + +Si la valeur existe dans le document JSON, `1` sera retourné. + +Si la valeur n'existe pas, `0` sera retourné. + +Exemple: + +``` sql +SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 1 +SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 4) = 0 +``` + +`indices_or_keys` est une liste de zéro ou plusieurs arguments chacun d'entre eux peut être une chaîne ou un entier. + +- String = membre d'objet d'accès par clé. +- Entier positif = accédez au n-ème membre / clé depuis le début. +- Entier négatif = accédez au n-ème membre / clé à partir de la fin. + +Minimum de l'indice de l'élément est 1. Ainsi, l'élément 0 n'existe pas. + +Vous pouvez utiliser des entiers pour accéder à la fois aux tableaux JSON et aux objets JSON. + +Ainsi, par exemple: + +``` sql +SELECT JSONExtractKey('{"a": "hello", "b": [-100, 200.0, 300]}', 1) = 'a' +SELECT JSONExtractKey('{"a": "hello", "b": [-100, 200.0, 300]}', 2) = 'b' +SELECT JSONExtractKey('{"a": "hello", "b": [-100, 200.0, 300]}', -1) = 'b' +SELECT JSONExtractKey('{"a": "hello", "b": [-100, 200.0, 300]}', -2) = 'a' +SELECT JSONExtractString('{"a": "hello", "b": [-100, 200.0, 300]}', 1) = 'hello' +``` + +## JSONLength(json\[, indices\_or\_keys\]…) {#jsonlengthjson-indices-or-keys} + +Renvoie la longueur D'un tableau JSON ou d'un objet JSON. + +Si la valeur n'existe pas ou a un mauvais type, `0` sera retourné. + +Exemple: + +``` sql +SELECT JSONLength('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 3 +SELECT JSONLength('{"a": "hello", "b": [-100, 200.0, 300]}') = 2 +``` + +## JSONType(json\[, indices\_or\_keys\]…) {#jsontypejson-indices-or-keys} + +De retour le type d'une valeur JSON. + +Si la valeur n'existe pas, `Null` sera retourné. + +Exemple: + +``` sql +SELECT JSONType('{"a": "hello", "b": [-100, 200.0, 300]}') = 'Object' +SELECT JSONType('{"a": "hello", "b": [-100, 200.0, 300]}', 'a') = 'String' +SELECT JSONType('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 'Array' +``` + +## JSONExtractUInt(json\[, indices\_or\_keys\]…) {#jsonextractuintjson-indices-or-keys} + +## JSONExtractInt(json\[, indices\_or\_keys\]…) {#jsonextractintjson-indices-or-keys} + +## JSONExtractFloat(json\[, indices\_or\_keys\]…) {#jsonextractfloatjson-indices-or-keys} + +## JSONExtractBool(json\[, indices\_or\_keys\]…) {#jsonextractbooljson-indices-or-keys} + +Analyse un JSON et extrait une valeur. Ces fonctions sont similaires à `visitParam` fonction. + +Si la valeur n'existe pas ou a un mauvais type, `0` sera retourné. + +Exemple: + +``` sql +SELECT JSONExtractInt('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 1) = -100 +SELECT JSONExtractFloat('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 2) = 200.0 +SELECT JSONExtractUInt('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', -1) = 300 +``` + +## JSONExtractString(json\[, indices\_or\_keys\]…) {#jsonextractstringjson-indices-or-keys} + +Analyse un JSON et extrait une chaîne. Cette fonction est similaire à `visitParamExtractString` fonction. + +Si la valeur n'existe pas ou a un mauvais type, une chaîne vide est retournée. + +La valeur est sans échappement. Si l'échappement échoue, il renvoie une chaîne vide. + +Exemple: + +``` sql +SELECT JSONExtractString('{"a": "hello", "b": [-100, 200.0, 300]}', 'a') = 'hello' +SELECT JSONExtractString('{"abc":"\\n\\u0000"}', 'abc') = '\n\0' +SELECT JSONExtractString('{"abc":"\\u263a"}', 'abc') = '☺' +SELECT JSONExtractString('{"abc":"\\u263"}', 'abc') = '' +SELECT JSONExtractString('{"abc":"hello}', 'abc') = '' +``` + +## JSONExtract(json\[, indices\_or\_keys…\], return\_type) {#jsonextractjson-indices-or-keys-return-type} + +Analyse un JSON et extrait une valeur du type de données clickhouse donné. + +C'est une généralisation de la précédente `JSONExtract` fonction. +Cela signifie +`JSONExtract(..., 'String')` retourne exactement le même que `JSONExtractString()`, +`JSONExtract(..., 'Float64')` retourne exactement le même que `JSONExtractFloat()`. + +Exemple: + +``` sql +SELECT JSONExtract('{"a": "hello", "b": [-100, 200.0, 300]}', 'Tuple(String, Array(Float64))') = ('hello',[-100,200,300]) +SELECT JSONExtract('{"a": "hello", "b": [-100, 200.0, 300]}', 'Tuple(b Array(Float64), a String)') = ([-100,200,300],'hello') +SELECT JSONExtract('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 'Array(Nullable(Int8))') = [-100, NULL, NULL] +SELECT JSONExtract('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 4, 'Nullable(Int64)') = NULL +SELECT JSONExtract('{"passed": true}', 'passed', 'UInt8') = 1 +SELECT JSONExtract('{"day": "Thursday"}', 'day', 'Enum8(\'Sunday\' = 0, \'Monday\' = 1, \'Tuesday\' = 2, \'Wednesday\' = 3, \'Thursday\' = 4, \'Friday\' = 5, \'Saturday\' = 6)') = 'Thursday' +SELECT JSONExtract('{"day": 5}', 'day', 'Enum8(\'Sunday\' = 0, \'Monday\' = 1, \'Tuesday\' = 2, \'Wednesday\' = 3, \'Thursday\' = 4, \'Friday\' = 5, \'Saturday\' = 6)') = 'Friday' +``` + +## JSONExtractKeysAndValues(json\[, indices\_or\_keys…\], value\_type) {#jsonextractkeysandvaluesjson-indices-or-keys-value-type} + +Analyser les paires clé-valeur à partir D'un JSON où les valeurs sont du type de données clickhouse donné. + +Exemple: + +``` sql +SELECT JSONExtractKeysAndValues('{"x": {"a": 5, "b": 7, "c": 11}}', 'x', 'Int8') = [('a',5),('b',7),('c',11)]; +``` + +## JSONExtractRaw(json\[, indices\_or\_keys\]…) {#jsonextractrawjson-indices-or-keys} + +Retourne une partie de JSON. + +Si la pièce n'existe pas ou a un mauvais type, une chaîne vide est retournée. + +Exemple: + +``` sql +SELECT JSONExtractRaw('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = '[-100, 200.0, 300]' +``` + +## JSONExtractArrayRaw(json\[, indices\_or\_keys\]…) {#jsonextractarrayrawjson-indices-or-keys} + +Retourne un tableau avec des éléments de tableau JSON, chacun représenté comme une chaîne non analysée. + +Si la pièce n'existe pas ou n'est pas de tableau, un tableau vide sera retournée. + +Exemple: + +``` sql +SELECT JSONExtractArrayRaw('{"a": "hello", "b": [-100, 200.0, "hello"]}', 'b') = ['-100', '200.0', '"hello"']' +``` + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/json_functions/) diff --git a/docs/fr/query_language/functions/logical_functions.md b/docs/fr/query_language/functions/logical_functions.md new file mode 100644 index 00000000000..bae864784d3 --- /dev/null +++ b/docs/fr/query_language/functions/logical_functions.md @@ -0,0 +1,19 @@ +--- +machine_translated: true +--- + +# Les fonctions logiques {#logical-functions} + +Les fonctions logiques acceptent tous les types numériques, mais renvoient un nombre UInt8 égal à 0 ou 1. + +Zéro comme argument est considéré “false,” alors que toute valeur non nulle est considérée comme “true”. + +## et, et opérateur {#and-and-operator} + +## ou, ou opérateur {#or-or-operator} + +## pas, pas opérateur {#not-not-operator} + +## xor {#xor} + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/logical_functions/) diff --git a/docs/fr/query_language/functions/machine_learning_functions.md b/docs/fr/query_language/functions/machine_learning_functions.md new file mode 100644 index 00000000000..9a348958ece --- /dev/null +++ b/docs/fr/query_language/functions/machine_learning_functions.md @@ -0,0 +1,17 @@ +--- +machine_translated: true +--- + +# Fonctions d'apprentissage automatique {#machine-learning-functions} + +## evalMLMethod (prédiction) {#machine_learning_methods-evalmlmethod} + +Prédiction utilisant des modèles de régression ajustés utilise `evalMLMethod` fonction. Voir le lien dans la `linearRegression`. + +### Régression Linéaire Stochastique {#stochastic-linear-regression} + +Le [stochasticLinearRegression](../agg_functions/reference.md#agg_functions-stochasticlinearregression) la fonction d'agrégat implémente une méthode de descente de gradient stochastique utilisant un modèle linéaire et une fonction de perte MSE. Utiliser `evalMLMethod` prédire sur de nouvelles données. + +### Régression Logistique Stochastique {#stochastic-logistic-regression} + +Le [stochasticLogisticRegression](../agg_functions/reference.md#agg_functions-stochasticlogisticregression) la fonction d'agrégation implémente la méthode de descente de gradient stochastique pour le problème de classification binaire. Utiliser `evalMLMethod` prédire sur de nouvelles données. diff --git a/docs/fr/query_language/functions/math_functions.md b/docs/fr/query_language/functions/math_functions.md new file mode 100644 index 00000000000..4696eb1438a --- /dev/null +++ b/docs/fr/query_language/functions/math_functions.md @@ -0,0 +1,113 @@ +--- +machine_translated: true +--- + +# Fonctions mathématiques {#mathematical-functions} + +Toutes les fonctions renvoient un nombre Float64. La précision du résultat est proche de la précision maximale possible, mais le résultat peut ne pas coïncider avec le nombre représentable de la machine le plus proche du nombre réel correspondant. + +## e() {#e} + +Renvoie un nombre Float64 proche du nombre E. + +## pi() {#pi} + +Returns a Float64 number that is close to the number π. + +## exp (x) {#expx} + +Accepte un argument numérique et renvoie un Float64 nombre proche de l'exposant de l'argument. + +## log(x), ln (x) {#logx-lnx} + +Accepte un argument numérique et renvoie un nombre Float64 proche du logarithme naturel de l'argument. + +## exp2 (x) {#exp2x} + +Accepte un argument numérique et renvoie un nombre Float64 proche de 2 à la puissance de X. + +## log2 (x) {#log2x} + +Accepte un argument numérique et renvoie un Float64 nombre proximité du logarithme binaire de l'argument. + +## exp10 (x) {#exp10x} + +Accepte un argument numérique et renvoie un nombre Float64 proche de 10 à la puissance de X. + +## log10 (x) {#log10x} + +Accepte un argument numérique et renvoie un nombre Float64 proche du logarithme décimal de l'argument. + +## sqrt (x) {#sqrtx} + +Accepte un argument numérique et renvoie un Float64 nombre proche de la racine carrée de l'argument. + +## cbrt (x) {#cbrtx} + +Accepte un argument numérique et renvoie un Float64 nombre proche de la racine cubique de l'argument. + +## erf (x) {#erfx} + +Si ‘x’ is non-negative, then erf(x / σ√2) est la probabilité qu'une variable aléatoire ayant une distribution normale avec un écart type ‘σ’ prend la valeur qui est séparée de la valeur attendue par plus de ‘x’. + +Exemple (règle de trois sigma): + +``` sql +SELECT erf(3 / sqrt(2)) +``` + +``` text +┌─erf(divide(3, sqrt(2)))─┐ +│ 0.9973002039367398 │ +└─────────────────────────┘ +``` + +## erfc (x) {#erfcx} + +Accepte un argument numérique et renvoie un nombre Float64 proche de 1-erf (x), mais sans perte de précision pour ‘x’ valeur. + +## lgamma (x) {#lgammax} + +Le logarithme de la fonction gamma. + +## tgamma (x) {#tgammax} + +La fonction Gamma. + +## sin (x) {#sinx} + +Sine. + +## cos (x) {#cosx} + +Cosinus. + +## tan (x) {#tanx} + +Tangente. + +## asin (x) {#asinx} + +Le sinus d'arc. + +## acos (x) {#acosx} + +Le cosinus de l'arc. + +## atan (x) {#atanx} + +L'arc tangente. + +## pow(x, y), la puissance(x, y) {#powx-y-powerx-y} + +Prend deux arguments numériques x et Y. renvoie un nombre Float64 proche de x à la puissance de Y. + +## intExp2 {#intexp2} + +Accepte un argument numérique et renvoie un nombre UInt64 proche de 2 à la puissance de X. + +## intExp10 {#intexp10} + +Accepte un argument numérique et renvoie un nombre UInt64 proche de 10 à la puissance de X. + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/math_functions/) diff --git a/docs/fr/query_language/functions/other_functions.md b/docs/fr/query_language/functions/other_functions.md new file mode 100644 index 00000000000..50a2d9f7e35 --- /dev/null +++ b/docs/fr/query_language/functions/other_functions.md @@ -0,0 +1,1076 @@ +--- +machine_translated: true +--- + +# D'autres fonctions {#other-functions} + +## hôte() {#hostname} + +Renvoie une chaîne avec le nom de l'hôte sur lequel cette fonction a été exécutée. Pour le traitement distribué, c'est le nom du serveur distant, si la fonction est exécutée sur un serveur distant. + +## FQDN {#fqdn} + +Retourne le nom de domaine pleinement qualifié. + +**Syntaxe** + +``` sql +fqdn(); +``` + +Cette fonction est insensible à la casse. + +**Valeur renvoyée** + +- Chaîne avec le nom de domaine complet. + +Type: `String`. + +**Exemple** + +Requête: + +``` sql +SELECT FQDN(); +``` + +Résultat: + +``` text +┌─FQDN()──────────────────────────┐ +│ clickhouse.ru-central1.internal │ +└─────────────────────────────────┘ +``` + +## basename {#basename} + +Extrait la partie finale d'une chaîne après la dernière barre oblique ou barre oblique inverse. Cette fonction est souvent utilisée pour extraire le nom de fichier d'un chemin. + +``` sql +basename( expr ) +``` + +**Paramètre** + +- `expr` — Expression resulting in a [Chaîne](../../data_types/string.md) type de valeur. Tous les antislashs doivent être échappés dans la valeur résultante. + +**Valeur Renvoyée** + +Une chaîne de caractères qui contient: + +- La partie finale d'une chaîne après la dernière barre oblique ou barre oblique inverse. + + If the input string contains a path ending with slash or backslash, for example, `/` or `c:\`, the function returns an empty string. + +- La chaîne d'origine s'il n'y a pas de barres obliques ou de barres obliques inverses. + +**Exemple** + +``` sql +SELECT 'some/long/path/to/file' AS a, basename(a) +``` + +``` text +┌─a──────────────────────┬─basename('some\\long\\path\\to\\file')─┐ +│ some\long\path\to\file │ file │ +└────────────────────────┴────────────────────────────────────────┘ +``` + +``` sql +SELECT 'some\\long\\path\\to\\file' AS a, basename(a) +``` + +``` text +┌─a──────────────────────┬─basename('some\\long\\path\\to\\file')─┐ +│ some\long\path\to\file │ file │ +└────────────────────────┴────────────────────────────────────────┘ +``` + +``` sql +SELECT 'some-file-name' AS a, basename(a) +``` + +``` text +┌─a──────────────┬─basename('some-file-name')─┐ +│ some-file-name │ some-file-name │ +└────────────────┴────────────────────────────┘ +``` + +## visibleWidth (x) {#visiblewidthx} + +Calcule la largeur approximative lors de la sortie des valeurs vers la console au format texte (séparé par des tabulations). +Cette fonction est utilisée par le système pour implémenter de jolis formats. + +`NULL` est représenté comme une chaîne correspondant à `NULL` dans `Pretty` format. + +``` sql +SELECT visibleWidth(NULL) +``` + +``` text +┌─visibleWidth(NULL)─┐ +│ 4 │ +└────────────────────┘ +``` + +## toTypeName (x) {#totypenamex} + +Renvoie une chaîne contenant le nom du type de l'argument passé. + +Si `NULL` est passé à la fonction en entrée, puis il renvoie le `Nullable(Nothing)` type, ce qui correspond à un interne `NULL` représentation à ClickHouse. + +## la taille de bloc() {#function-blocksize} + +Récupère la taille du bloc. +Dans ClickHouse, les requêtes sont toujours exécutées sur des blocs (ensembles de parties de colonne). Cette fonction permet d'obtenir la taille du bloc pour lequel vous l'avez appelé. + +## matérialiser (x) {#materializex} + +Transforme une constante dans une colonne contenant une seule valeur. +Dans ClickHouse, les colonnes complètes et les constantes sont représentées différemment en mémoire. Les fonctions fonctionnent différemment pour les arguments constants et les arguments normaux (un code différent est exécuté), bien que le résultat soit presque toujours le même. Cette fonction sert à déboguer ce comportement. + +## ignore(…) {#ignore} + +Accepte tous les arguments, y compris `NULL`. Renvoie toujours 0. +Cependant, l'argument est toujours évalué. Cela peut être utilisé pour les benchmarks. + +## sommeil(secondes) {#sleepseconds} + +Dormir ‘seconds’ secondes sur chaque bloc de données. Vous pouvez spécifier un nombre entier ou un nombre à virgule flottante. + +## sleepEachRow (secondes) {#sleepeachrowseconds} + +Dormir ‘seconds’ secondes sur chaque ligne. Vous pouvez spécifier un nombre entier ou un nombre à virgule flottante. + +## currentDatabase() {#currentdatabase} + +Retourne le nom de la base de données actuelle. +Vous pouvez utiliser cette fonction dans les paramètres du moteur de table dans une requête CREATE TABLE où vous devez spécifier la base de données. + +## currentUser() {#other-function-currentuser} + +Renvoie la connexion de l'utilisateur actuel. La connexion de l'utilisateur, cette requête initiée, sera renvoyée en cas de requête distibuted. + +``` sql +SELECT currentUser(); +``` + +Alias: `user()`, `USER()`. + +**Valeurs renvoyées** + +- Connexion de l'utilisateur actuel. +- Connexion de l'utilisateur qui a lancé la requête en cas de requête distribuée. + +Type: `String`. + +**Exemple** + +Requête: + +``` sql +SELECT currentUser(); +``` + +Résultat: + +``` text +┌─currentUser()─┐ +│ default │ +└───────────────┘ +``` + +## isFinite (x) {#isfinitex} + +Accepte Float32 et Float64 et renvoie UInt8 égal à 1 si l'argument n'est pas infini et pas un NaN, sinon 0. + +## isInfinite (x) {#isinfinitex} + +Accepte Float32 et Float64 et renvoie UInt8 égal à 1 si l'argument est infini, sinon 0. Notez que 0 est retourné pour un NaN. + +## ifNotFinite {#ifnotfinite} + +Vérifie si la valeur à virgule flottante est finie. + +**Syntaxe** + + ifNotFinite(x,y) + +**Paramètre** + +- `x` — Value to be checked for infinity. Type: [Flottant\*](../../data_types/float.md). +- `y` — Fallback value. Type: [Flottant\*](../../data_types/float.md). + +**Valeur renvoyée** + +- `x` si `x` est finie. +- `y` si `x` n'est pas finie. + +**Exemple** + +Requête: + + SELECT 1/0 as infimum, ifNotFinite(infimum,42) + +Résultat: + + ┌─infimum─┬─ifNotFinite(divide(1, 0), 42)─┐ + │ inf │ 42 │ + └─────────┴───────────────────────────────┘ + +Vous pouvez obtenir un résultat similaire en utilisant [opérateur ternaire](conditional_functions.md#ternary-operator): `isFinite(x) ? x : y`. + +## isNaN (x) {#isnanx} + +Accepte Float32 et Float64 et renvoie UInt8 égal à 1 si l'argument est un NaN, sinon 0. + +## hasColumnInTable(\[‘hostname’\[, ‘username’\[, ‘password’\]\],\] ‘database’, ‘table’, ‘column’) {#hascolumnintablehostname-username-password-database-table-column} + +Accepte les chaînes constantes: nom de la base de données, nom de la table et nom de la colonne. Renvoie une expression constante UInt8 égale à 1 s'il y a une colonne, sinon 0. Si le paramètre hostname est défini, le test s'exécutera sur un serveur distant. +La fonction renvoie une exception si la table n'existe pas. +Pour les éléments imbriqués structure des données, la fonction vérifie l'existence d'une colonne. Pour la structure de données imbriquée elle-même, la fonction renvoie 0. + +## bar {#function-bar} + +Permet de construire un diagramme unicode-art. + +`bar(x, min, max, width)` dessine une bande avec une largeur proportionnelle à `(x - min)` et égale à `width` les caractères lors de la `x = max`. + +Paramètre: + +- `x` — Size to display. +- `min, max` — Integer constants. The value must fit in `Int64`. +- `width` — Constant, positive integer, can be fractional. + +La bande dessinée avec précision à un huitième d'un symbole. + +Exemple: + +``` sql +SELECT + toHour(EventTime) AS h, + count() AS c, + bar(c, 0, 600000, 20) AS bar +FROM test.hits +GROUP BY h +ORDER BY h ASC +``` + +``` text +┌──h─┬──────c─┬─bar────────────────┐ +│ 0 │ 292907 │ █████████▋ │ +│ 1 │ 180563 │ ██████ │ +│ 2 │ 114861 │ ███▋ │ +│ 3 │ 85069 │ ██▋ │ +│ 4 │ 68543 │ ██▎ │ +│ 5 │ 78116 │ ██▌ │ +│ 6 │ 113474 │ ███▋ │ +│ 7 │ 170678 │ █████▋ │ +│ 8 │ 278380 │ █████████▎ │ +│ 9 │ 391053 │ █████████████ │ +│ 10 │ 457681 │ ███████████████▎ │ +│ 11 │ 493667 │ ████████████████▍ │ +│ 12 │ 509641 │ ████████████████▊ │ +│ 13 │ 522947 │ █████████████████▍ │ +│ 14 │ 539954 │ █████████████████▊ │ +│ 15 │ 528460 │ █████████████████▌ │ +│ 16 │ 539201 │ █████████████████▊ │ +│ 17 │ 523539 │ █████████████████▍ │ +│ 18 │ 506467 │ ████████████████▊ │ +│ 19 │ 520915 │ █████████████████▎ │ +│ 20 │ 521665 │ █████████████████▍ │ +│ 21 │ 542078 │ ██████████████████ │ +│ 22 │ 493642 │ ████████████████▍ │ +│ 23 │ 400397 │ █████████████▎ │ +└────┴────────┴────────────────────┘ +``` + +## transformer {#transform} + +Transforme une valeur en fonction explicitement définis cartographie de certains éléments à l'autre. +Il existe deux variantes de cette fonction: + +### de transformation(x, array\_from, array\_to, par défaut) {#transformx-array-from-array-to-default} + +`x` – What to transform. + +`array_from` – Constant array of values for converting. + +`array_to` – Constant array of values to convert the values in ‘from’ de. + +`default` – Which value to use if ‘x’ n'est pas égale à une des valeurs de ‘from’. + +`array_from` et `array_to` – Arrays of the same size. + +Type: + +`transform(T, Array(T), Array(U), U) -> U` + +`T` et `U` peuvent être des types numériques, chaîne ou Date ou DateTime. +Lorsque la même lettre est indiquée (T ou U), pour les types numériques, il se peut qu'il ne s'agisse pas de types correspondants, mais de types ayant un type commun. +Par exemple, le premier argument peut avoir le type Int64, tandis que le second a le type Array(UInt16). + +Si l' ‘x’ la valeur est égale à l'un des éléments dans la ‘array\_from’ tableau, elle renvoie l'élément existant (qui est numéroté de même) de la ‘array\_to’ tableau. Sinon, elle renvoie ‘default’. S'il y a plusieurs éléments correspondants dans ‘array\_from’ il renvoie l'un des matches. + +Exemple: + +``` sql +SELECT + transform(SearchEngineID, [2, 3], ['Yandex', 'Google'], 'Other') AS title, + count() AS c +FROM test.hits +WHERE SearchEngineID != 0 +GROUP BY title +ORDER BY c DESC +``` + +``` text +┌─title─────┬──────c─┐ +│ Yandex │ 498635 │ +│ Google │ 229872 │ +│ Other │ 104472 │ +└───────────┴────────┘ +``` + +### de transformation(x, array\_from, array\_to) {#transformx-array-from-array-to} + +Diffère de la première variation en ce que le ‘default’ l'argument est omis. +Si l' ‘x’ la valeur est égale à l'un des éléments dans la ‘array\_from’ tableau, elle renvoie l'élément correspondant (qui est numéroté de même) de la ‘array\_to’ tableau. Sinon, elle renvoie ‘x’. + +Type: + +`transform(T, Array(T), Array(T)) -> T` + +Exemple: + +``` sql +SELECT + transform(domain(Referer), ['yandex.ru', 'google.ru', 'vk.com'], ['www.yandex', 'example.com']) AS s, + count() AS c +FROM test.hits +GROUP BY domain(Referer) +ORDER BY count() DESC +LIMIT 10 +``` + +``` text +┌─s──────────────┬───────c─┐ +│ │ 2906259 │ +│ www.yandex │ 867767 │ +│ ███████.ru │ 313599 │ +│ mail.yandex.ru │ 107147 │ +│ ██████.ru │ 100355 │ +│ █████████.ru │ 65040 │ +│ news.yandex.ru │ 64515 │ +│ ██████.net │ 59141 │ +│ example.com │ 57316 │ +└────────────────┴─────────┘ +``` + +## formatReadableSize (x) {#formatreadablesizex} + +Accepte la taille (nombre d'octets). Renvoie une taille arrondie avec un suffixe (KiB, MiB, etc.) comme une chaîne de caractères. + +Exemple: + +``` sql +SELECT + arrayJoin([1, 1024, 1024*1024, 192851925]) AS filesize_bytes, + formatReadableSize(filesize_bytes) AS filesize +``` + +``` text +┌─filesize_bytes─┬─filesize───┐ +│ 1 │ 1.00 B │ +│ 1024 │ 1.00 KiB │ +│ 1048576 │ 1.00 MiB │ +│ 192851925 │ 183.92 MiB │ +└────────────────┴────────────┘ +``` + +## moins (a, b) {#leasta-b} + +Renvoie la plus petite valeur de a et b. + +## la plus grande(a, b) {#greatesta-b} + +Renvoie la plus grande valeur de a et B. + +## le temps de disponibilité() {#uptime} + +Renvoie la disponibilité du serveur en quelques secondes. + +## version() {#version} + +Renvoie la version du serveur sous forme de chaîne. + +## fuseau() {#timezone} + +Retourne le fuseau horaire du serveur. + +## blockNumber {#blocknumber} + +Renvoie le numéro de séquence du bloc de données où se trouve la ligne. + +## rowNumberInBlock {#function-rownumberinblock} + +Renvoie le numéro de séquence de la ligne dans le bloc de données. Différents blocs de données sont toujours recalculés. + +## rowNumberInAllBlocks() {#rownumberinallblocks} + +Renvoie le numéro de séquence de la ligne dans le bloc de données. Cette fonction ne prend en compte que les blocs de données affectés. + +## voisin {#neighbor} + +La fonction de fenêtre qui donne accès à une ligne à un décalage spécifié qui vient avant ou après la ligne actuelle d'une colonne donnée. + +**Syntaxe** + +``` sql +neighbor(column, offset[, default_value]) +``` + +Le résultat de la fonction dépend du touché des blocs de données et l'ordre des données dans le bloc. +Si vous créez une sous-requête avec ORDER BY et appelez la fonction depuis l'extérieur de la sous-requête, vous pouvez obtenir le résultat attendu. + +**Paramètre** + +- `column` — A column name or scalar expression. +- `offset` — The number of rows forwards or backwards from the current row of `column`. [Int64](../../data_types/int_uint.md). +- `default_value` — Optional. The value to be returned if offset goes beyond the scope of the block. Type of data blocks affected. + +**Valeurs renvoyées** + +- De la valeur pour `column` dans `offset` distance de la ligne actuelle si `offset` la valeur n'est pas en dehors des limites du bloc. +- La valeur par défaut pour `column` si `offset` la valeur est en dehors des limites du bloc. Si `default_value` est donné, alors il sera utilisé. + +Type: type de blocs de données affectés ou type de valeur par défaut. + +**Exemple** + +Requête: + +``` sql +SELECT number, neighbor(number, 2) FROM system.numbers LIMIT 10; +``` + +Résultat: + +``` text +┌─number─┬─neighbor(number, 2)─┐ +│ 0 │ 2 │ +│ 1 │ 3 │ +│ 2 │ 4 │ +│ 3 │ 5 │ +│ 4 │ 6 │ +│ 5 │ 7 │ +│ 6 │ 8 │ +│ 7 │ 9 │ +│ 8 │ 0 │ +│ 9 │ 0 │ +└────────┴─────────────────────┘ +``` + +Requête: + +``` sql +SELECT number, neighbor(number, 2, 999) FROM system.numbers LIMIT 10; +``` + +Résultat: + +``` text +┌─number─┬─neighbor(number, 2, 999)─┐ +│ 0 │ 2 │ +│ 1 │ 3 │ +│ 2 │ 4 │ +│ 3 │ 5 │ +│ 4 │ 6 │ +│ 5 │ 7 │ +│ 6 │ 8 │ +│ 7 │ 9 │ +│ 8 │ 999 │ +│ 9 │ 999 │ +└────────┴──────────────────────────┘ +``` + +Cette fonction peut être utilisée pour calculer une année à valeur métrique: + +Requête: + +``` sql +WITH toDate('2018-01-01') AS start_date +SELECT + toStartOfMonth(start_date + (number * 32)) AS month, + toInt32(month) % 100 AS money, + neighbor(money, -12) AS prev_year, + round(prev_year / money, 2) AS year_over_year +FROM numbers(16) +``` + +Résultat: + +``` text +┌──────month─┬─money─┬─prev_year─┬─year_over_year─┐ +│ 2018-01-01 │ 32 │ 0 │ 0 │ +│ 2018-02-01 │ 63 │ 0 │ 0 │ +│ 2018-03-01 │ 91 │ 0 │ 0 │ +│ 2018-04-01 │ 22 │ 0 │ 0 │ +│ 2018-05-01 │ 52 │ 0 │ 0 │ +│ 2018-06-01 │ 83 │ 0 │ 0 │ +│ 2018-07-01 │ 13 │ 0 │ 0 │ +│ 2018-08-01 │ 44 │ 0 │ 0 │ +│ 2018-09-01 │ 75 │ 0 │ 0 │ +│ 2018-10-01 │ 5 │ 0 │ 0 │ +│ 2018-11-01 │ 36 │ 0 │ 0 │ +│ 2018-12-01 │ 66 │ 0 │ 0 │ +│ 2019-01-01 │ 97 │ 32 │ 0.33 │ +│ 2019-02-01 │ 28 │ 63 │ 2.25 │ +│ 2019-03-01 │ 56 │ 91 │ 1.62 │ +│ 2019-04-01 │ 87 │ 22 │ 0.25 │ +└────────────┴───────┴───────────┴────────────────┘ +``` + +## runningDifference(x) {#other_functions-runningdifference} + +Calculates the difference between successive row values ​​in the data block. +Renvoie 0 pour la première ligne et la différence par rapport à la rangée précédente pour chaque nouvelle ligne. + +Le résultat de la fonction dépend du touché des blocs de données et l'ordre des données dans le bloc. +Si vous créez une sous-requête avec ORDER BY et appelez la fonction depuis l'extérieur de la sous-requête, vous pouvez obtenir le résultat attendu. + +Exemple: + +``` sql +SELECT + EventID, + EventTime, + runningDifference(EventTime) AS delta +FROM +( + SELECT + EventID, + EventTime + FROM events + WHERE EventDate = '2016-11-24' + ORDER BY EventTime ASC + LIMIT 5 +) +``` + +``` text +┌─EventID─┬───────────EventTime─┬─delta─┐ +│ 1106 │ 2016-11-24 00:00:04 │ 0 │ +│ 1107 │ 2016-11-24 00:00:05 │ 1 │ +│ 1108 │ 2016-11-24 00:00:05 │ 0 │ +│ 1109 │ 2016-11-24 00:00:09 │ 4 │ +│ 1110 │ 2016-11-24 00:00:10 │ 1 │ +└─────────┴─────────────────────┴───────┘ +``` + +Veuillez noter que la taille du bloc affecte le résultat. Avec chaque nouveau bloc, le `runningDifference` l'état est réinitialisé. + +``` sql +SELECT + number, + runningDifference(number + 1) AS diff +FROM numbers(100000) +WHERE diff != 1 +``` + +``` text +┌─number─┬─diff─┐ +│ 0 │ 0 │ +└────────┴──────┘ +┌─number─┬─diff─┐ +│ 65536 │ 0 │ +└────────┴──────┘ +``` + +``` sql +set max_block_size=100000 -- default value is 65536! + +SELECT + number, + runningDifference(number + 1) AS diff +FROM numbers(100000) +WHERE diff != 1 +``` + +``` text +┌─number─┬─diff─┐ +│ 0 │ 0 │ +└────────┴──────┘ +``` + +## runningDifferenceStartingWithFirstvalue {#runningdifferencestartingwithfirstvalue} + +De même que pour [runningDifference](./other_functions.md#other_functions-runningdifference) la différence est la valeur de la première ligne, est retourné à la valeur de la première ligne, et chaque rangée suivante renvoie la différence de la rangée précédente. + +## MACNumToString (num) {#macnumtostringnum} + +Accepte un numéro UInt64. Interprète comme une adresse MAC dans big endian. Renvoie une chaîne contenant l'adresse MAC correspondante au format AA:BB:CC: DD:EE: FF (Nombres séparés par deux points sous forme hexadécimale). + +## MACStringToNum (s) {#macstringtonums} + +La fonction inverse de MACNumToString. Si l'adresse MAC a un format non valide, elle renvoie 0. + +## MACStringToOUI (s) {#macstringtoouis} + +Accepte une adresse MAC au format AA:BB:CC: DD:EE: FF (Nombres séparés par deux points sous forme hexadécimale). Renvoie les trois premiers octets sous la forme D'un nombre UInt64. Si l'adresse MAC a un format non valide, elle renvoie 0. + +## getSizeOfEnumType {#getsizeofenumtype} + +Retourne le nombre de champs dans [Enum](../../data_types/enum.md). + +``` sql +getSizeOfEnumType(value) +``` + +**Paramètre:** + +- `value` — Value of type `Enum`. + +**Valeurs renvoyées** + +- Le nombre de champs avec `Enum` les valeurs d'entrée. +- Une exception est levée si le type n'est pas `Enum`. + +**Exemple** + +``` sql +SELECT getSizeOfEnumType( CAST('a' AS Enum8('a' = 1, 'b' = 2) ) ) AS x +``` + +``` text +┌─x─┐ +│ 2 │ +└───┘ +``` + +## blockSerializedSize {#blockserializedsize} + +Retourne la taille sur le disque (sans tenir compte de la compression). + +``` sql +blockSerializedSize(value[, value[, ...]]) +``` + +**Paramètre:** + +- `value` — Any value. + +**Valeurs renvoyées** + +- Le nombre d'octets qui seront écrites sur le disque pour le bloc de valeurs (sans compression). + +**Exemple** + +``` sql +SELECT blockSerializedSize(maxState(1)) as x +``` + +``` text +┌─x─┐ +│ 2 │ +└───┘ +``` + +## toColumnTypeName {#tocolumntypename} + +Renvoie le nom de la classe qui représente le type de données de la colonne dans la RAM. + +``` sql +toColumnTypeName(value) +``` + +**Paramètre:** + +- `value` — Any type of value. + +**Valeurs renvoyées** + +- Une chaîne avec le nom de la classe utilisée pour représenter `value` type de données dans la mémoire RAM. + +**Exemple de la différence entre`toTypeName ' and ' toColumnTypeName`** + +``` sql +SELECT toTypeName(CAST('2018-01-01 01:02:03' AS DateTime)) +``` + +``` text +┌─toTypeName(CAST('2018-01-01 01:02:03', 'DateTime'))─┐ +│ DateTime │ +└─────────────────────────────────────────────────────┘ +``` + +``` sql +SELECT toColumnTypeName(CAST('2018-01-01 01:02:03' AS DateTime)) +``` + +``` text +┌─toColumnTypeName(CAST('2018-01-01 01:02:03', 'DateTime'))─┐ +│ Const(UInt32) │ +└───────────────────────────────────────────────────────────┘ +``` + +L'exemple montre que le `DateTime` type de données est stocké dans la mémoire comme `Const(UInt32)`. + +## dumpColumnStructure {#dumpcolumnstructure} + +Affiche une description détaillée des structures de données en RAM + +``` sql +dumpColumnStructure(value) +``` + +**Paramètre:** + +- `value` — Any type of value. + +**Valeurs renvoyées** + +- Une chaîne décrivant la structure utilisée pour représenter `value` type de données dans la mémoire RAM. + +**Exemple** + +``` sql +SELECT dumpColumnStructure(CAST('2018-01-01 01:02:03', 'DateTime')) +``` + +``` text +┌─dumpColumnStructure(CAST('2018-01-01 01:02:03', 'DateTime'))─┐ +│ DateTime, Const(size = 1, UInt32(size = 1)) │ +└──────────────────────────────────────────────────────────────┘ +``` + +## defaultValueOfArgumentType {#defaultvalueofargumenttype} + +Affiche la valeur par défaut du type de données. + +Ne pas inclure des valeurs par défaut pour les colonnes personnalisées définies par l'utilisateur. + +``` sql +defaultValueOfArgumentType(expression) +``` + +**Paramètre:** + +- `expression` — Arbitrary type of value or an expression that results in a value of an arbitrary type. + +**Valeurs renvoyées** + +- `0` pour les nombres. +- Chaîne vide pour les chaînes. +- `ᴺᵁᴸᴸ` pour [Nullable](../../data_types/nullable.md). + +**Exemple** + +``` sql +SELECT defaultValueOfArgumentType( CAST(1 AS Int8) ) +``` + +``` text +┌─defaultValueOfArgumentType(CAST(1, 'Int8'))─┐ +│ 0 │ +└─────────────────────────────────────────────┘ +``` + +``` sql +SELECT defaultValueOfArgumentType( CAST(1 AS Nullable(Int8) ) ) +``` + +``` text +┌─defaultValueOfArgumentType(CAST(1, 'Nullable(Int8)'))─┐ +│ ᴺᵁᴸᴸ │ +└───────────────────────────────────────────────────────┘ +``` + +## reproduire {#other-functions-replicate} + +Crée un tableau avec une seule valeur. + +Utilisé pour la mise en œuvre interne de [arrayJoin](array_join.md#functions_arrayjoin). + +``` sql +SELECT replicate(x, arr); +``` + +**Paramètre:** + +- `arr` — Original array. ClickHouse creates a new array of the same length as the original and fills it with the value `x`. +- `x` — The value that the resulting array will be filled with. + +**Valeur renvoyée** + +Un tableau rempli de la valeur `x`. + +Type: `Array`. + +**Exemple** + +Requête: + +``` sql +SELECT replicate(1, ['a', 'b', 'c']) +``` + +Résultat: + +``` text +┌─replicate(1, ['a', 'b', 'c'])─┐ +│ [1,1,1] │ +└───────────────────────────────┘ +``` + +## filesystemAvailable {#filesystemavailable} + +Renvoie la quantité d'espace restant sur le système de fichiers où se trouvent les fichiers des bases de données. Il est toujours plus petit que l'espace libre total ([filesystemFree](#filesystemfree)) parce qu'un peu d'espace est réservé au système D'exploitation. + +**Syntaxe** + +``` sql +filesystemAvailable() +``` + +**Valeur renvoyée** + +- La quantité d'espace restant disponible en octets. + +Type: [UInt64](../../data_types/int_uint.md). + +**Exemple** + +Requête: + +``` sql +SELECT formatReadableSize(filesystemAvailable()) AS "Available space", toTypeName(filesystemAvailable()) AS "Type"; +``` + +Résultat: + +``` text +┌─Available space─┬─Type───┐ +│ 30.75 GiB │ UInt64 │ +└─────────────────┴────────┘ +``` + +## filesystemFree {#filesystemfree} + +Retourne montant total de l'espace libre sur le système de fichiers où les fichiers des bases de données. Voir aussi `filesystemAvailable` + +**Syntaxe** + +``` sql +filesystemFree() +``` + +**Valeur renvoyée** + +- Quantité d'espace libre en octets. + +Type: [UInt64](../../data_types/int_uint.md). + +**Exemple** + +Requête: + +``` sql +SELECT formatReadableSize(filesystemFree()) AS "Free space", toTypeName(filesystemFree()) AS "Type"; +``` + +Résultat: + +``` text +┌─Free space─┬─Type───┐ +│ 32.39 GiB │ UInt64 │ +└────────────┴────────┘ +``` + +## filesystemCapacity {#filesystemcapacity} + +Renvoie la capacité du système de fichiers en octets. Pour l'évaluation, la [chemin](../../operations/server_settings/settings.md#server_settings-path) le répertoire de données doit être configuré. + +**Syntaxe** + +``` sql +filesystemCapacity() +``` + +**Valeur renvoyée** + +- Informations de capacité du système de fichiers en octets. + +Type: [UInt64](../../data_types/int_uint.md). + +**Exemple** + +Requête: + +``` sql +SELECT formatReadableSize(filesystemCapacity()) AS "Capacity", toTypeName(filesystemCapacity()) AS "Type" +``` + +Résultat: + +``` text +┌─Capacity──┬─Type───┐ +│ 39.32 GiB │ UInt64 │ +└───────────┴────────┘ +``` + +## finalizeAggregation {#function-finalizeaggregation} + +Prend de l'état de la fonction d'agrégation. Renvoie le résultat de l'agrégation (état finalisé). + +## runningAccumulate {#function-runningaccumulate} + +Prend les membres de la fonction d'agrégation et renvoie une colonne avec des valeurs, sont le résultat de l'accumulation de ces états pour un ensemble de bloc de lignes, de la première à la ligne actuelle. +Par exemple, prend l'état de la fonction d'agrégat (exemple runningAccumulate(uniqState(UserID))), et pour chaque ligne de bloc, retourne le résultat de la fonction d'agrégat lors de la fusion des états de toutes les lignes précédentes et de la ligne actuelle. +Ainsi, le résultat de la fonction dépend de la partition des données aux blocs et de l'ordre des données dans le bloc. + +## joinGet {#joinget} + +La fonction vous permet d'extraire les données de la table de la même manière qu'à partir d'un [dictionnaire](../../query_language/dicts/index.md). + +Obtient les données de [Rejoindre](../../operations/table_engines/join.md#creating-a-table) tables utilisant la clé de jointure spécifiée. + +Ne prend en charge que les tables créées avec `ENGINE = Join(ANY, LEFT, )` déclaration. + +**Syntaxe** + +``` sql +joinGet(join_storage_table_name, `value_column`, join_keys) +``` + +**Paramètre** + +- `join_storage_table_name` — an [identificateur](../syntax.md#syntax-identifiers) indique l'endroit où la recherche est effectuée. L'identificateur est recherché dans la base de données par défaut (voir paramètre `default_database` dans le fichier de config). Pour remplacer la base de données par défaut, utilisez `USE db_name` ou spécifiez la base de données et la table via le séparateur `db_name.db_table` voir l'exemple. +- `value_column` — name of the column of the table that contains required data. +- `join_keys` — list of keys. + +**Valeur renvoyée** + +Retourne la liste des valeurs correspond à la liste des clés. + +Si certain n'existe pas dans la table source alors `0` ou `null` seront renvoyés basé sur [join\_use\_nulls](../../operations/settings/settings.md#join_use_nulls) paramètre. + +Plus d'infos sur `join_use_nulls` dans [Opération de jointure](../../operations/table_engines/join.md). + +**Exemple** + +Table d'entrée: + +``` sql +CREATE DATABASE db_test +CREATE TABLE db_test.id_val(`id` UInt32, `val` UInt32) ENGINE = Join(ANY, LEFT, id) SETTINGS join_use_nulls = 1 +INSERT INTO db_test.id_val VALUES (1,11)(2,12)(4,13) +``` + +``` text +┌─id─┬─val─┐ +│ 4 │ 13 │ +│ 2 │ 12 │ +│ 1 │ 11 │ +└────┴─────┘ +``` + +Requête: + +``` sql +SELECT joinGet(db_test.id_val,'val',toUInt32(number)) from numbers(4) SETTINGS join_use_nulls = 1 +``` + +Résultat: + +``` text +┌─joinGet(db_test.id_val, 'val', toUInt32(number))─┐ +│ 0 │ +│ 11 │ +│ 12 │ +│ 0 │ +└──────────────────────────────────────────────────┘ +``` + +## modelEvaluate(model\_name, …) {#function-modelevaluate} + +Évaluer le modèle externe. +Accepte un nom de modèle et le modèle de l'argumentation. Renvoie Float64. + +## throwIf (x \[, custom\_message\]) {#throwifx-custom-message} + +Lever une exception si l'argument est non nul. +custom\_message - est un paramètre optionnel: une chaîne constante, fournit un message d'erreur + +``` sql +SELECT throwIf(number = 3, 'Too many') FROM numbers(10); +``` + +``` text +↙ Progress: 0.00 rows, 0.00 B (0.00 rows/s., 0.00 B/s.) Received exception from server (version 19.14.1): +Code: 395. DB::Exception: Received from localhost:9000. DB::Exception: Too many. +``` + +## identité {#identity} + +Renvoie la même valeur qui a été utilisée comme argument. Utilisé pour le débogage et les tests, permet d'annuler l'utilisation de l'index et d'obtenir les performances de requête d'une analyse complète. Lorsque la requête est analysée pour une utilisation possible de l'index, l'analyseur ne regarde pas à l'intérieur `identity` fonction. + +**Syntaxe** + +``` sql +identity(x) +``` + +**Exemple** + +Requête: + +``` sql +SELECT identity(42) +``` + +Résultat: + +``` text +┌─identity(42)─┐ +│ 42 │ +└──────────────┘ +``` + +## randomPrintableASCII {#randomascii} + +Génère une chaîne avec un ensemble aléatoire de [ASCII](https://en.wikipedia.org/wiki/ASCII#Printable_characters) caractères imprimables. + +**Syntaxe** + +``` sql +randomPrintableASCII(length) +``` + +**Paramètre** + +- `length` — Resulting string length. Positive integer. + + If you pass `length < 0`, behavior of the function is undefined. + +**Valeur renvoyée** + +- Chaîne avec un ensemble aléatoire de [ASCII](https://en.wikipedia.org/wiki/ASCII#Printable_characters) caractères imprimables. + +Type: [Chaîne](../../data_types/string.md) + +**Exemple** + +``` sql +SELECT number, randomPrintableASCII(30) as str, length(str) FROM system.numbers LIMIT 3 +``` + +``` text +┌─number─┬─str────────────────────────────┬─length(randomPrintableASCII(30))─┐ +│ 0 │ SuiCOSTvC0csfABSw=UcSzp2.`rv8x │ 30 │ +│ 1 │ 1Ag NlJ &RCN:*>HVPG;PE-nO"SUFD │ 30 │ +│ 2 │ /"+<"wUTh:=LjJ Vm!c&hI*m#XTfzz │ 30 │ +└────────┴────────────────────────────────┴──────────────────────────────────┘ +``` + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/other_functions/) diff --git a/docs/fr/query_language/functions/random_functions.md b/docs/fr/query_language/functions/random_functions.md new file mode 100644 index 00000000000..386ad3953bc --- /dev/null +++ b/docs/fr/query_language/functions/random_functions.md @@ -0,0 +1,27 @@ +--- +machine_translated: true +--- + +# Fonctions pour générer des nombres pseudo-aléatoires {#functions-for-generating-pseudo-random-numbers} + +Des générateurs Non cryptographiques de nombres pseudo-aléatoires sont utilisés. + +Toutes les fonctions acceptent zéro argument ou un argument. +Si un argument est passé, il peut être de n'importe quel type, et sa valeur n'est utilisée pour rien. +Le seul but de cet argument est d'empêcher l'élimination des sous-expressions courantes, de sorte que deux instances différentes de la même fonction renvoient des colonnes différentes avec des nombres aléatoires différents. + +## Rand {#rand} + +Renvoie un nombre UInt32 pseudo-aléatoire, réparti uniformément entre tous les nombres de type UInt32. +Utilise un générateur congruentiel linéaire. + +## rand64 {#rand64} + +Renvoie un nombre UInt64 pseudo-aléatoire, réparti uniformément entre tous les nombres de type UInt64. +Utilise un générateur congruentiel linéaire. + +## randConstant {#randconstant} + +Renvoie un nombre UInt32 pseudo-aléatoire, la valeur est une pour différents blocs. + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/random_functions/) diff --git a/docs/fr/query_language/functions/rounding_functions.md b/docs/fr/query_language/functions/rounding_functions.md new file mode 100644 index 00000000000..7ad425c0ebb --- /dev/null +++ b/docs/fr/query_language/functions/rounding_functions.md @@ -0,0 +1,187 @@ +--- +machine_translated: true +--- + +# Fonctions d'arrondi {#rounding-functions} + +## floor(x\[, N\]) {#floorx-n} + +Renvoie le plus grand nombre rond inférieur ou égal à `x`. Un nombre rond est un multiple de 1 / 10N, ou le nombre le plus proche du type de données approprié si 1 / 10N n'est pas exact. +‘N’ est une constante entière, paramètre facultatif. Par défaut, il est zéro, ce qui signifie arrondir à un entier. +‘N’ peut être négative. + +Exemple: `floor(123.45, 1) = 123.4, floor(123.45, -1) = 120.` + +`x` est n'importe quel type numérique. Le résultat est un nombre du même type. +Pour les arguments entiers, il est logique d'arrondir avec un négatif `N` valeur (pour non négatif `N`, la fonction ne fait rien). +Si l'arrondi provoque un débordement (par exemple, floor(-128, -1)), un résultat spécifique à l'implémentation est renvoyé. + +## ceil(x\[, n\]), plafond (x\[, n\]) {#ceilx-n-ceilingx-n} + +Renvoie le plus petit nombre rond supérieur ou égal à `x`. Dans tous les autres sens, il est le même que le `floor` fonction (voir ci-dessus). + +## trunc(x \[, N\]), truncate(x \[, N\]) {#truncx-n-truncatex-n} + +Renvoie le nombre rond avec la plus grande valeur absolue qui a une valeur absolue inférieure ou égale à `x`‘s. In every other way, it is the same as the ’floor’ fonction (voir ci-dessus). + +## round(x\[, N\]) {#rounding_functions-round} + +Arrondit une valeur à un nombre spécifié de décimales. + +La fonction renvoie le nombre plus proche de l'ordre spécifié. Dans le cas où un nombre donné a une distance égale aux nombres environnants, la fonction utilise l'arrondi de banquier pour les types de nombres flottants et arrondit à partir de zéro pour les autres types de nombres. + +``` sql +round(expression [, decimal_places]) +``` + +**Paramètre:** + +- `expression` — A number to be rounded. Can be any [expression](../syntax.md#syntax-expressions) retour du numérique [type de données](../../data_types/index.md#data_types). +- `decimal-places` — An integer value. + - Si `decimal-places > 0` alors la fonction arrondit la valeur à droite du point décimal. + - Si `decimal-places < 0` alors la fonction arrondit la valeur à gauche de la virgule décimale. + - Si `decimal-places = 0` alors la fonction arrondit la valeur à l'entier. Dans ce cas, l'argument peut être omis. + +**Valeur renvoyée:** + +Le nombre arrondi du même type que le nombre d'entrée. + +### Exemple {#examples} + +**Exemple d'utilisation** + +``` sql +SELECT number / 2 AS x, round(x) FROM system.numbers LIMIT 3 +``` + +``` text +┌───x─┬─round(divide(number, 2))─┐ +│ 0 │ 0 │ +│ 0.5 │ 0 │ +│ 1 │ 1 │ +└─────┴──────────────────────────┘ +``` + +**Des exemples de l'arrondissement** + +Le résultat est arrondi au plus proche. + +``` text +round(3.2, 0) = 3 +round(4.1267, 2) = 4.13 +round(22,-1) = 20 +round(467,-2) = 500 +round(-467,-2) = -500 +``` + +Le Banquier arrondit. + +``` text +round(3.5) = 4 +round(4.5) = 4 +round(3.55, 1) = 3.6 +round(3.65, 1) = 3.6 +``` + +**Voir Aussi** + +- [roundBankers](#roundbankers) + +## roundBankers {#roundbankers} + +Arrondit un nombre à une position décimale spécifiée. + +- Si le nombre est arrondi à mi-chemin entre deux nombres, la fonction utilise l'arrondi. + + Banker's rounding is a method of rounding fractional numbers. When the rounding number is halfway between two numbers, it's rounded to the nearest even digit at the specified decimal position. For example: 3.5 rounds up to 4, 2.5 rounds down to 2. + + It's the default rounding method for floating point numbers defined in [IEEE 754](https://en.wikipedia.org/wiki/IEEE_754#Roundings_to_nearest). The [round](#rounding_functions-round) function performs the same rounding for floating point numbers. The `roundBankers` function also rounds integers the same way, for example, `roundBankers(45, -1) = 40`. + +- Dans d'autres cas, la fonction arrondit les nombres à l'entier le plus proche. + +À l'aide de l'arrondi, vous pouvez réduire l'effet qu'arrondir les nombres sur les résultats d'additionner ou de soustraire ces chiffres. + +Par exemple, les nombres de somme 1.5, 2.5, 3.5, 4.5 avec des arrondis différents: + +- Pas d'arrondi: 1.5 + 2.5 + 3.5 + 4.5 = 12. +- Arrondi du banquier: 2 + 2 + 4 + 4 = 12. +- Arrondi à l'entier le plus proche: 2 + 3 + 4 + 5 = 14. + +**Syntaxe** + +``` sql +roundBankers(expression [, decimal_places]) +``` + +**Paramètre** + +- `expression` — A number to be rounded. Can be any [expression](../syntax.md#syntax-expressions) retour du numérique [type de données](../../data_types/index.md#data_types). +- `decimal-places` — Decimal places. An integer number. + - `decimal-places > 0` — The function rounds the number to the given position right of the decimal point. Example: `roundBankers(3.55, 1) = 3.6`. + - `decimal-places < 0` — The function rounds the number to the given position left of the decimal point. Example: `roundBankers(24.55, -1) = 20`. + - `decimal-places = 0` — The function rounds the number to an integer. In this case the argument can be omitted. Example: `roundBankers(2.5) = 2`. + +**Valeur renvoyée** + +Valeur arrondie par la méthode d'arrondi du banquier. + +### Exemple {#examples-1} + +**Exemple d'utilisation** + +Requête: + +``` sql + SELECT number / 2 AS x, roundBankers(x, 0) AS b fROM system.numbers limit 10 +``` + +Résultat: + +``` text +┌───x─┬─b─┐ +│ 0 │ 0 │ +│ 0.5 │ 0 │ +│ 1 │ 1 │ +│ 1.5 │ 2 │ +│ 2 │ 2 │ +│ 2.5 │ 2 │ +│ 3 │ 3 │ +│ 3.5 │ 4 │ +│ 4 │ 4 │ +│ 4.5 │ 4 │ +└─────┴───┘ +``` + +**Exemples d'arrondi bancaire** + +``` text +roundBankers(0.4) = 0 +roundBankers(-3.5) = -4 +roundBankers(4.5) = 4 +roundBankers(3.55, 1) = 3.6 +roundBankers(3.65, 1) = 3.6 +roundBankers(10.35, 1) = 10.4 +roundBankers(10.755, 2) = 11,76 +``` + +**Voir Aussi** + +- [rond](#rounding_functions-round) + +## roundToExp2 (num) {#roundtoexp2num} + +Accepte un certain nombre. Si le nombre est inférieur à un, elle renvoie 0. Sinon, il arrondit le nombre au degré le plus proche (entier non négatif) de deux. + +## roundDuration (num) {#rounddurationnum} + +Accepte un certain nombre. Si le nombre est inférieur à un, elle renvoie 0. Sinon, il arrondit le nombre vers le bas pour les nombres de l'ensemble: 1, 10, 30, 60, 120, 180, 240, 300, 600, 1200, 1800, 3600, 7200, 18000, 36000. Cette fonction est spécifique à Yandex.Metrica et utilisé pour la mise en œuvre du rapport sur la durée de la session. + +## roundAge (num) {#roundagenum} + +Accepte un certain nombre. Si le nombre est inférieur à 18, il renvoie 0. Sinon, il arrondit le nombre à un nombre de l'ensemble: 18, 25, 35, 45, 55. Cette fonction est spécifique à Yandex.Metrica et utilisé pour la mise en œuvre du rapport sur l'âge des utilisateurs. + +## roundDown(num, arr) {#rounddownnum-arr} + +Accepte un nombre et l'arrondit à un élément dans le tableau spécifié. Si la valeur est inférieure à la plus basse, la plus basse lié est retourné. + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/rounding_functions/) diff --git a/docs/fr/query_language/functions/splitting_merging_functions.md b/docs/fr/query_language/functions/splitting_merging_functions.md new file mode 100644 index 00000000000..8f207f38259 --- /dev/null +++ b/docs/fr/query_language/functions/splitting_merging_functions.md @@ -0,0 +1,113 @@ +--- +machine_translated: true +--- + +# Fonctions pour diviser et fusionner des chaînes et des tableaux {#functions-for-splitting-and-merging-strings-and-arrays} + +## splitByChar (séparateur, s) {#splitbycharseparator-s} + +Divise une chaîne en sous-chaînes séparées par un caractère spécifique. Il utilise une chaîne constante `separator` qui composé d'un seul caractère. +Retourne un tableau de certaines chaînes. Les sous-chaînes vides peuvent être sélectionnées si le séparateur se produit au début ou à la fin de la chaîne, ou s'il existe plusieurs séparateurs consécutifs. + +**Syntaxe** + +``` sql +splitByChar(, ) +``` + +**Paramètre** + +- `separator` — The separator which should contain exactly one character. [Chaîne](../../data_types/string.md). +- `s` — The string to split. [Chaîne](../../data_types/string.md). + +**Valeur renvoyée(s)** + +Retourne un tableau de certaines chaînes. Des sous-chaînes vides peuvent être sélectionnées lorsque: + +- Un séparateur se produit au début ou à la fin de la chaîne; +- Il existe plusieurs séparateurs consécutifs; +- La chaîne d'origine `s` est vide. + +Type: [Tableau](../../data_types/array.md) de [Chaîne](../../data_types/string.md). + +**Exemple** + +``` sql +SELECT splitByChar(',', '1,2,3,abcde') +``` + +``` text +┌─splitByChar(',', '1,2,3,abcde')─┐ +│ ['1','2','3','abcde'] │ +└─────────────────────────────────┘ +``` + +## splitByString(séparateur, s) {#splitbystringseparator-s} + +Divise une chaîne en sous-chaînes séparées par une chaîne. Il utilise une chaîne constante `separator` de plusieurs caractères comme séparateur. Si la chaîne `separator` est vide, il va diviser la chaîne `s` dans un tableau de caractères uniques. + +**Syntaxe** + +``` sql +splitByString(, ) +``` + +**Paramètre** + +- `separator` — The separator. [Chaîne](../../data_types/string.md). +- `s` — The string to split. [Chaîne](../../data_types/string.md). + +**Valeur renvoyée(s)** + +Retourne un tableau de certaines chaînes. Des sous-chaînes vides peuvent être sélectionnées lorsque: + +Type: [Tableau](../../data_types/array.md) de [Chaîne](../../data_types/string.md). + +- Un séparateur non vide se produit au début ou à la fin de la chaîne; +- Il existe plusieurs séparateurs consécutifs non vides; +- La chaîne d'origine `s` est vide tandis que le séparateur n'est pas vide. + +**Exemple** + +``` sql +SELECT splitByString(', ', '1, 2 3, 4,5, abcde') +``` + +``` text +┌─splitByString(', ', '1, 2 3, 4,5, abcde')─┐ +│ ['1','2 3','4,5','abcde'] │ +└───────────────────────────────────────────┘ +``` + +``` sql +SELECT splitByString('', 'abcde') +``` + +``` text +┌─splitByString('', 'abcde')─┐ +│ ['a','b','c','d','e'] │ +└────────────────────────────┘ +``` + +## arrayStringConcat(arr \[, séparateur\]) {#arraystringconcatarr-separator} + +Concatène les chaînes répertoriées dans le tableau avec le séparateur."séparateur" est un paramètre facultatif: une chaîne constante, définie à une chaîne vide par défaut. +Retourne une chaîne de caractères. + +## alphaTokens (s) {#alphatokenss} + +Sélectionne des sous-chaînes d'octets consécutifs dans les plages A-z et A-Z. retourne un tableau de sous-chaînes. + +**Exemple** + +``` sql +SELECT alphaTokens('abca1abc') +``` + +``` text +┌─alphaTokens('abca1abc')─┐ +│ ['abca','abc'] │ +└─────────────────────────┘ +``` + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/splitting_merging_functions/) diff --git a/docs/fr/query_language/functions/string_functions.md b/docs/fr/query_language/functions/string_functions.md new file mode 100644 index 00000000000..fb6c5d608d1 --- /dev/null +++ b/docs/fr/query_language/functions/string_functions.md @@ -0,0 +1,486 @@ +--- +machine_translated: true +--- + +# Fonctions pour travailler avec des chaînes {#functions-for-working-with-strings} + +## vide {#empty} + +Renvoie 1 pour une chaîne vide ou 0 pour une chaîne non vide. +Le type de résultat est UInt8. +Une chaîne est considérée comme non vide si elle contient au moins un octet, même s'il s'agit d'un espace ou d'un octet nul. +La fonction fonctionne également pour les tableaux. + +## notEmpty {#notempty} + +Renvoie 0 pour une chaîne vide ou 1 pour une chaîne non vide. +Le type de résultat est UInt8. +La fonction fonctionne également pour les tableaux. + +## longueur {#length} + +Renvoie la longueur d'une chaîne en octets (pas en caractères, et pas en points de code). +Le type de résultat est UInt64. +La fonction fonctionne également pour les tableaux. + +## lengthUTF8 {#lengthutf8} + +Renvoie la longueur d'une chaîne en points de code Unicode (pas en caractères), en supposant que la chaîne contient un ensemble d'octets qui composent le texte codé en UTF-8. Si cette hypothèse n'est pas remplie, elle renvoie un résultat (elle ne lance pas d'exception). +Le type de résultat est UInt64. + +## char\_length, CHAR\_LENGTH {#char-length} + +Renvoie la longueur d'une chaîne en points de code Unicode (pas en caractères), en supposant que la chaîne contient un ensemble d'octets qui composent le texte codé en UTF-8. Si cette hypothèse n'est pas remplie, elle renvoie un résultat (elle ne lance pas d'exception). +Le type de résultat est UInt64. + +## character\_length, CHARACTER\_LENGTH {#character-length} + +Renvoie la longueur d'une chaîne en points de code Unicode (pas en caractères), en supposant que la chaîne contient un ensemble d'octets qui composent le texte codé en UTF-8. Si cette hypothèse n'est pas remplie, elle renvoie un résultat (elle ne lance pas d'exception). +Le type de résultat est UInt64. + +## plus bas, lcase {#lower} + +Convertit les symboles latins ASCII dans une chaîne en minuscules. + +## supérieur, ucase {#upper} + +Convertit les symboles latins ASCII dans une chaîne en majuscules. + +## lowerUTF8 {#lowerutf8} + +Convertit une chaîne en minuscules, en supposant que la chaîne de caractères contient un ensemble d'octets qui composent un texte UTF-8. +Il ne détecte pas la langue. Donc, pour le turc, le résultat pourrait ne pas être exactement correct. +Si la longueur de la séquence d'octets UTF-8 est différente pour les majuscules et les minuscules d'un point de code, le résultat peut être incorrect pour ce point de code. +Si la chaîne contient un ensemble d'octets qui N'est pas UTF-8, le comportement n'est pas défini. + +## upperUTF8 {#upperutf8} + +Convertit une chaîne en majuscules, en supposant que la chaîne de caractères contient un ensemble d'octets qui composent un texte UTF-8. +Il ne détecte pas la langue. Donc, pour le turc, le résultat pourrait ne pas être exactement correct. +Si la longueur de la séquence d'octets UTF-8 est différente pour les majuscules et les minuscules d'un point de code, le résultat peut être incorrect pour ce point de code. +Si la chaîne contient un ensemble d'octets qui N'est pas UTF-8, le comportement n'est pas défini. + +## isValidUTF8 {#isvalidutf8} + +Renvoie 1, si l'ensemble d'octets est codé en UTF-8 valide, sinon 0. + +## toValidUTF8 {#tovalidutf8} + +Remplace les caractères UTF-8 non valides par `�` (U+FFFD) caractère. Tous les caractères non valides s'exécutant dans une rangée sont réduits en un seul caractère de remplacement. + +``` sql +toValidUTF8( input_string ) +``` + +Paramètre: + +- input\_string — Any set of bytes represented as the [Chaîne](../../data_types/string.md) type de données objet. + +Valeur renvoyée: chaîne UTF-8 valide. + +**Exemple** + +``` sql +SELECT toValidUTF8('\x61\xF0\x80\x80\x80b') +``` + +``` text +┌─toValidUTF8('a����b')─┐ +│ a�b │ +└───────────────────────┘ +``` + +## répéter {#repeat} + +Répète une corde autant de fois que spécifié et concatène les valeurs répliquées comme une seule chaîne. + +**Syntaxe** + +``` sql +repeat(s, n) +``` + +**Paramètre** + +- `s` — The string to repeat. [Chaîne](../../data_types/string.md). +- `n` — The number of times to repeat the string. [UInt](../../data_types/int_uint.md). + +**Valeur renvoyée** + +La chaîne unique, qui contient la chaîne `s` répéter `n` temps. Si `n` \< 1, la fonction renvoie une chaîne vide. + +Type: `String`. + +**Exemple** + +Requête: + +``` sql +SELECT repeat('abc', 10) +``` + +Résultat: + +``` text +┌─repeat('abc', 10)──────────────┐ +│ abcabcabcabcabcabcabcabcabcabc │ +└────────────────────────────────┘ +``` + +## inverser {#reverse} + +Inverse la chaîne (comme une séquence d'octets). + +## reverseUTF8 {#reverseutf8} + +Inverse une séquence de points de code Unicode, en supposant que la chaîne contient un ensemble d'octets représentant un texte UTF-8. Sinon, il fait autre chose (il ne lance pas d'exception). + +## format(pattern, s0, s1, …) {#format} + +Formatage du motif constant avec la chaîne listée dans les arguments. `pattern` est un modèle de format Python simplifié. Chaîne de Format contient “replacement fields” entouré par des accolades `{}`. Tout ce qui n'est pas contenu dans les accolades est considéré comme du texte littéral, qui est copié inchangé dans la sortie. Si vous devez inclure un caractère d'Accolade dans le texte littéral, il peut être échappé en doublant: `{{ '{{' }}` et `{{ '}}' }}`. Les noms de champs peuvent être des nombres (à partir de zéro) ou vides (ils sont alors traités comme des nombres de conséquence). + +``` sql +SELECT format('{1} {0} {1}', 'World', 'Hello') +``` + +``` text +┌─format('{1} {0} {1}', 'World', 'Hello')─┐ +│ Hello World Hello │ +└─────────────────────────────────────────┘ +``` + +``` sql +SELECT format('{} {}', 'Hello', 'World') +``` + +``` text +┌─format('{} {}', 'Hello', 'World')─┐ +│ Hello World │ +└───────────────────────────────────┘ +``` + +## concat {#concat} + +Concatène les chaînes répertoriées dans les arguments, sans séparateur. + +**Syntaxe** + +``` sql +concat(s1, s2, ...) +``` + +**Paramètre** + +Valeurs de type String ou FixedString. + +**Valeurs renvoyées** + +Renvoie la chaîne qui résulte de la concaténation des arguments. + +Si l'une des valeurs d'argument est `NULL`, `concat` retourner `NULL`. + +**Exemple** + +Requête: + +``` sql +SELECT concat('Hello, ', 'World!') +``` + +Résultat: + +``` text +┌─concat('Hello, ', 'World!')─┐ +│ Hello, World! │ +└─────────────────────────────┘ +``` + +## concatAssumeInjective {#concatassumeinjective} + +Même que [concat](#concat) la différence est que vous devez vous assurer que `concat(s1, s2, ...) → sn` est injectif, il sera utilisé pour l'optimisation du groupe par. + +La fonction est nommée “injective” si elle renvoie toujours un résultat différent pour différentes valeurs d'arguments. En d'autres termes: des arguments différents ne donnent jamais un résultat identique. + +**Syntaxe** + +``` sql +concatAssumeInjective(s1, s2, ...) +``` + +**Paramètre** + +Valeurs de type String ou FixedString. + +**Valeurs renvoyées** + +Renvoie la chaîne qui résulte de la concaténation des arguments. + +Si l'une des valeurs d'argument est `NULL`, `concatAssumeInjective` retourner `NULL`. + +**Exemple** + +Table d'entrée: + +``` sql +CREATE TABLE key_val(`key1` String, `key2` String, `value` UInt32) ENGINE = TinyLog; +INSERT INTO key_val VALUES ('Hello, ','World',1), ('Hello, ','World',2), ('Hello, ','World!',3), ('Hello',', World!',2); +SELECT * from key_val; +``` + +``` text +┌─key1────┬─key2─────┬─value─┐ +│ Hello, │ World │ 1 │ +│ Hello, │ World │ 2 │ +│ Hello, │ World! │ 3 │ +│ Hello │ , World! │ 2 │ +└─────────┴──────────┴───────┘ +``` + +Requête: + +``` sql +SELECT concat(key1, key2), sum(value) FROM key_val GROUP BY concatAssumeInjective(key1, key2) +``` + +Résultat: + +``` text +┌─concat(key1, key2)─┬─sum(value)─┐ +│ Hello, World! │ 3 │ +│ Hello, World! │ 2 │ +│ Hello, World │ 3 │ +└────────────────────┴────────────┘ +``` + +## substring(s, offset, longueur), mid(s, offset, longueur), substr(s, offset, longueur) {#substring} + +Renvoie une sous-chaîne commençant par l'octet du ‘offset’ index ‘length’ octets de long. L'indexation des caractères commence à partir d'un (comme dans SQL standard). Le ‘offset’ et ‘length’ les arguments doivent être des constantes. + +## substringUTF8(s, offset, longueur) {#substringutf8} + +Le même que ‘substring’, mais pour les points de code Unicode. Fonctionne sous l'hypothèse que la chaîne contient un ensemble d'octets représentant un texte codé en UTF-8. Si cette hypothèse n'est pas remplie, elle renvoie un résultat (elle ne lance pas d'exception). + +## appendTrailingCharIfAbsent (s, c) {#appendtrailingcharifabsent} + +Si l' ‘s’ la chaîne n'est pas vide et ne contient pas ‘c’ personnage à la fin, il ajoute le ‘c’ personnage à la fin. + +## convertCharset(s, à partir de, à) {#convertcharset} + +Retourne une chaîne de caractères ‘s’ qui a été converti à partir de l'encodage dans ‘from’ pour l'encodage dans ‘to’. + +## base64Encode(s) {#base64encode} + +Encodage ‘s’ chaîne dans base64 + +## base64Decode(s) {#base64decode} + +Décoder la chaîne codée en base64 ‘s’ dans la chaîne d'origine. En cas d'échec, une exception est levée. + +## tryBase64Decode(s) {#trybase64decode} + +Semblable à base64Decode, mais en cas d'erreur, une chaîne vide serait renvoyé. + +## endsWith (s, suffixe) {#endswith} + +Renvoie s'il faut se terminer par le suffixe spécifié. Retourne 1 si la chaîne se termine par le suffixe spécifié, sinon elle renvoie 0. + +## startsWith (STR, préfixe) {#startswith} + +Retourne 1 si la chaîne commence par le préfixe spécifié, sinon elle renvoie 0. + +``` sql +SELECT startsWith('Spider-Man', 'Spi'); +``` + +**Valeurs renvoyées** + +- 1, si la chaîne commence par le préfixe spécifié. +- 0, si la chaîne ne commence pas par le préfixe spécifié. + +**Exemple** + +Requête: + +``` sql +SELECT startsWith('Hello, world!', 'He'); +``` + +Résultat: + +``` text +┌─startsWith('Hello, world!', 'He')─┐ +│ 1 │ +└───────────────────────────────────┘ +``` + +## coupe {#trim} + +Supprime tous les caractères spécifiés du début ou de la fin d'une chaîne. +Par défaut supprime toutes les occurrences consécutives d'espaces communs (caractère ASCII 32) des deux extrémités d'une chaîne. + +**Syntaxe** + +``` sql +trim([[LEADING|TRAILING|BOTH] trim_character FROM] input_string) +``` + +**Paramètre** + +- `trim_character` — specified characters for trim. [Chaîne](../../data_types/string.md). +- `input_string` — string for trim. [Chaîne](../../data_types/string.md). + +**Valeur renvoyée** + +Une chaîne sans caractères de début et (ou) de fin spécifiés. + +Type: `String`. + +**Exemple** + +Requête: + +``` sql +SELECT trim(BOTH ' ()' FROM '( Hello, world! )') +``` + +Résultat: + +``` text +┌─trim(BOTH ' ()' FROM '( Hello, world! )')─┐ +│ Hello, world! │ +└───────────────────────────────────────────────┘ +``` + +## trimLeft {#trimleft} + +Supprime toutes les occurrences consécutives d'espaces communs (caractère ASCII 32) depuis le début d'une chaîne. Il ne supprime pas d'autres types de caractères d'espaces (tabulation, espace sans pause, etc.). + +**Syntaxe** + +``` sql +trimLeft(input_string) +``` + +Alias: `ltrim(input_string)`. + +**Paramètre** + +- `input_string` — string to trim. [Chaîne](../../data_types/string.md). + +**Valeur renvoyée** + +Une chaîne sans ouvrir les espaces communs. + +Type: `String`. + +**Exemple** + +Requête: + +``` sql +SELECT trimLeft(' Hello, world! ') +``` + +Résultat: + +``` text +┌─trimLeft(' Hello, world! ')─┐ +│ Hello, world! │ +└─────────────────────────────────────┘ +``` + +## trimRight {#trimright} + +Supprime toutes les occurrences consécutives d'espaces communs (caractère ASCII 32) de la fin d'une chaîne. Il ne supprime pas d'autres types de caractères d'espaces (tabulation, espace sans pause, etc.). + +**Syntaxe** + +``` sql +trimRight(input_string) +``` + +Alias: `rtrim(input_string)`. + +**Paramètre** + +- `input_string` — string to trim. [Chaîne](../../data_types/string.md). + +**Valeur renvoyée** + +Une chaîne sans espaces communs de fin. + +Type: `String`. + +**Exemple** + +Requête: + +``` sql +SELECT trimRight(' Hello, world! ') +``` + +Résultat: + +``` text +┌─trimRight(' Hello, world! ')─┐ +│ Hello, world! │ +└──────────────────────────────────────┘ +``` + +## trimBoth {#trimboth} + +Supprime toutes les occurrences consécutives d'espaces communs (caractère ASCII 32) des deux extrémités d'une chaîne. Il ne supprime pas d'autres types de caractères d'espaces (tabulation, espace sans pause, etc.). + +**Syntaxe** + +``` sql +trimBoth(input_string) +``` + +Alias: `trim(input_string)`. + +**Paramètre** + +- `input_string` — string to trim. [Chaîne](../../data_types/string.md). + +**Valeur renvoyée** + +Une chaîne sans espaces communs de début et de fin. + +Type: `String`. + +**Exemple** + +Requête: + +``` sql +SELECT trimBoth(' Hello, world! ') +``` + +Résultat: + +``` text +┌─trimBoth(' Hello, world! ')─┐ +│ Hello, world! │ +└─────────────────────────────────────┘ +``` + +## CRC32 (s) {#crc32} + +Renvoie la somme de contrôle CRC32 d'une chaîne, en utilisant le polynôme CRC-32-IEEE 802.3 et la valeur initiale `0xffffffff` (zlib mise en œuvre). + +Le type de résultat est UInt32. + +## CRC32IEEE (s) {#crc32ieee} + +Renvoie la somme de contrôle CRC32 d'une chaîne, en utilisant le polynôme CRC-32-IEEE 802.3. + +Le type de résultat est UInt32. + +## CRC64 (s) {#crc64} + +Renvoie la somme de contrôle CRC64 d'une chaîne, en utilisant le polynôme CRC-64-ECMA. + +Le type de résultat est UInt64. + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/string_functions/) diff --git a/docs/fr/query_language/functions/string_replace_functions.md b/docs/fr/query_language/functions/string_replace_functions.md new file mode 100644 index 00000000000..522451ef910 --- /dev/null +++ b/docs/fr/query_language/functions/string_replace_functions.md @@ -0,0 +1,91 @@ +--- +machine_translated: true +--- + +# Les fonctions de recherche et de remplacement dans les chaînes {#functions-for-searching-and-replacing-in-strings} + +## replaceOne(botte de foin, modèle, remplacement) {#replaceonehaystack-pattern-replacement} + +Remplace la première occurrence, si elle existe, ‘pattern’ sous-chaîne dans ‘haystack’ avec l' ‘replacement’ substring. +Ci-après, ‘pattern’ et ‘replacement’ doivent être constantes. + +## replaceAll(botte de foin, motif, remplacement), Remplacer(botte de foin, motif, remplacement) {#replaceallhaystack-pattern-replacement-replacehaystack-pattern-replacement} + +Remplace toutes les occurrences du ‘pattern’ sous-chaîne dans ‘haystack’ avec l' ‘replacement’ substring. + +## replaceRegexpOne(botte de foin, modèle, remplacement) {#replaceregexponehaystack-pattern-replacement} + +Remplacement en utilisant le ‘pattern’ expression régulière. Une expression régulière re2. +Remplace seulement la première occurrence, si elle existe. +Un motif peut être spécifié comme ‘replacement’. Ce modèle peut inclure des substitutions `\0-\9`. +Substitution `\0` inclut l'expression régulière entière. Substitution `\1-\9` correspond au sous-modèle numbers.To utilisez le `\` caractère dans un modèle, échappez-le en utilisant `\`. +Aussi garder à l'esprit qu'un littéral de chaîne nécessite une évasion. + +Exemple 1. Conversion de la date au format américain: + +``` sql +SELECT DISTINCT + EventDate, + replaceRegexpOne(toString(EventDate), '(\\d{4})-(\\d{2})-(\\d{2})', '\\2/\\3/\\1') AS res +FROM test.hits +LIMIT 7 +FORMAT TabSeparated +``` + +``` text +2014-03-17 03/17/2014 +2014-03-18 03/18/2014 +2014-03-19 03/19/2014 +2014-03-20 03/20/2014 +2014-03-21 03/21/2014 +2014-03-22 03/22/2014 +2014-03-23 03/23/2014 +``` + +Exemple 2. Copier une chaîne dix fois: + +``` sql +SELECT replaceRegexpOne('Hello, World!', '.*', '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0') AS res +``` + +``` text +┌─res────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World! │ +└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ +``` + +## replaceRegexpAll(botte de foin, modèle, remplacement) {#replaceregexpallhaystack-pattern-replacement} + +Cela fait la même chose, mais remplace toutes les occurrences. Exemple: + +``` sql +SELECT replaceRegexpAll('Hello, World!', '.', '\\0\\0') AS res +``` + +``` text +┌─res────────────────────────┐ +│ HHeelllloo,, WWoorrlldd!! │ +└────────────────────────────┘ +``` + +Par exception, si une expression régulière travaillé sur un vide sous-chaîne, le remplacement n'est pas effectué plus d'une fois. +Exemple: + +``` sql +SELECT replaceRegexpAll('Hello, World!', '^', 'here: ') AS res +``` + +``` text +┌─res─────────────────┐ +│ here: Hello, World! │ +└─────────────────────┘ +``` + +## regexpQuoteMeta (s) {#regexpquotemetas} + +La fonction ajoute une barre oblique inverse avant certains caractères prédéfinis dans la chaîne. +Les personnages prédéfinis: ‘0’, ‘\\’, ‘\|’, ‘(’, ‘)’, ‘^’, ‘$’, ‘.’, ‘\[’, '\]', ‘?’, '\*‘,’+‘,’{‘,’:‘,’-'. +Cette implémentation diffère légèrement de re2:: RE2:: QuoteMeta. Il échappe à zéro octet comme \\0 au lieu de 00 et il échappe uniquement les caractères requis. +Pour plus d'informations, voir le lien: [RE2](https://github.com/google/re2/blob/master/re2/re2.cc#L473) + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/string_replace_functions/) diff --git a/docs/fr/query_language/functions/string_search_functions.md b/docs/fr/query_language/functions/string_search_functions.md new file mode 100644 index 00000000000..d519005ef58 --- /dev/null +++ b/docs/fr/query_language/functions/string_search_functions.md @@ -0,0 +1,376 @@ +--- +machine_translated: true +--- + +# Fonctions de recherche de chaînes {#functions-for-searching-strings} + +La recherche est sensible à la casse par défaut dans toutes ces fonctions. Il existe des variantes pour la recherche insensible à la casse. + +## position(botte de foin, aiguille), localiser( botte de foin, aiguille) {#position} + +Renvoie la position (en octets) de la sous-chaîne trouvée dans la chaîne, à partir de 1. + +Fonctionne sous l'hypothèse que la chaîne de caractères contient un ensemble d'octets représentant un octet texte codé. Si cette hypothèse n'est pas remplie et qu'un caractère ne peut pas être représenté à l'aide d'un seul octet, la fonction ne lance pas d'exception et renvoie un résultat inattendu. Si le caractère peut être représenté en utilisant deux octets, il utilisera deux octets et ainsi de suite. + +Pour une recherche insensible à la casse, utilisez la fonction [positioncaseinsensible](#positioncaseinsensitive). + +**Syntaxe** + +``` sql +position(haystack, needle) +``` + +Alias: `locate(haystack, needle)`. + +**Paramètre** + +- `haystack` — string, in which substring will to be searched. [Chaîne](../syntax.md#syntax-string-literal). +- `needle` — substring to be searched. [Chaîne](../syntax.md#syntax-string-literal). + +**Valeurs renvoyées** + +- Position de départ en octets (à partir de 1), si la sous-chaîne a été trouvée. +- 0, si la sous-chaîne n'a pas été trouvé. + +Type: `Integer`. + +**Exemple** + +Phrase “Hello, world!” contient un ensemble d'octets représentant un octet texte codé. La fonction renvoie un résultat attendu: + +Requête: + +``` sql +SELECT position('Hello, world!', '!') +``` + +Résultat: + +``` text +┌─position('Hello, world!', '!')─┐ +│ 13 │ +└────────────────────────────────┘ +``` + +La même phrase en russe contient des caractères qui ne peuvent pas être représentés en utilisant un seul octet. La fonction renvoie un résultat inattendu (utilisation [positionUTF8](#positionutf8) fonction pour le texte codé sur plusieurs octets): + +Requête: + +``` sql +SELECT position('Привет, мир!', '!') +``` + +Résultat: + +``` text +┌─position('Привет, мир!', '!')─┐ +│ 21 │ +└───────────────────────────────┘ +``` + +## positioncaseinsensible {#positioncaseinsensitive} + +Le même que [position](#position) renvoie la position (en octets) de la sous-chaîne trouvée dans la chaîne, à partir de 1. Utilisez la fonction pour une recherche insensible à la casse. + +Fonctionne sous l'hypothèse que la chaîne de caractères contient un ensemble d'octets représentant un octet texte codé. Si cette hypothèse n'est pas remplie et qu'un caractère ne peut pas être représenté à l'aide d'un seul octet, la fonction ne lance pas d'exception et renvoie un résultat inattendu. Si le caractère peut être représenté en utilisant deux octets, il utilisera deux octets et ainsi de suite. + +**Syntaxe** + +``` sql +positionCaseInsensitive(haystack, needle) +``` + +**Paramètre** + +- `haystack` — string, in which substring will to be searched. [Chaîne](../syntax.md#syntax-string-literal). +- `needle` — substring to be searched. [Chaîne](../syntax.md#syntax-string-literal). + +**Valeurs renvoyées** + +- Position de départ en octets (à partir de 1), si la sous-chaîne a été trouvée. +- 0, si la sous-chaîne n'a pas été trouvé. + +Type: `Integer`. + +**Exemple** + +Requête: + +``` sql +SELECT positionCaseInsensitive('Hello, world!', 'hello') +``` + +Résultat: + +``` text +┌─positionCaseInsensitive('Hello, world!', 'hello')─┐ +│ 1 │ +└───────────────────────────────────────────────────┘ +``` + +## positionUTF8 {#positionutf8} + +Renvoie la position (en points Unicode) de la sous-chaîne trouvée dans la chaîne, à partir de 1. + +Fonctionne sous l'hypothèse que la chaîne contient un ensemble d'octets représentant un texte codé en UTF-8. Si cette hypothèse n'est pas remplie, la fonction ne lance pas d'exception et renvoie un résultat inattendu. Si le caractère peut être représenté en utilisant deux points Unicode, il en utilisera deux et ainsi de suite. + +Pour une recherche insensible à la casse, utilisez la fonction [positionCaseInsensitiveUTF8](#positioncaseinsensitiveutf8). + +**Syntaxe** + +``` sql +positionUTF8(haystack, needle) +``` + +**Paramètre** + +- `haystack` — string, in which substring will to be searched. [Chaîne](../syntax.md#syntax-string-literal). +- `needle` — substring to be searched. [Chaîne](../syntax.md#syntax-string-literal). + +**Valeurs renvoyées** + +- Position de départ dans les points Unicode (à partir de 1), si la sous-chaîne a été trouvée. +- 0, si la sous-chaîne n'a pas été trouvé. + +Type: `Integer`. + +**Exemple** + +Phrase “Hello, world!” en russe contient un ensemble de points Unicode représentant un texte codé à un seul point. La fonction renvoie un résultat attendu: + +Requête: + +``` sql +SELECT positionUTF8('Привет, мир!', '!') +``` + +Résultat: + +``` text +┌─positionUTF8('Привет, мир!', '!')─┐ +│ 12 │ +└───────────────────────────────────┘ +``` + +Phrase “Salut, étudiante!” où le caractère `é` peut être représenté en utilisant un point (`U+00E9`) ou deux points (`U+0065U+0301`) la fonction peut être retournée un résultat inattendu: + +Requête pour la lettre `é` qui est représenté un point Unicode `U+00E9`: + +``` sql +SELECT positionUTF8('Salut, étudiante!', '!') +``` + +Résultat: + +``` text +┌─positionUTF8('Salut, étudiante!', '!')─┐ +│ 17 │ +└────────────────────────────────────────┘ +``` + +Requête pour la lettre `é` qui est représenté deux points Unicode `U+0065U+0301`: + +``` sql +SELECT positionUTF8('Salut, étudiante!', '!') +``` + +Résultat: + +``` text +┌─positionUTF8('Salut, étudiante!', '!')─┐ +│ 18 │ +└────────────────────────────────────────┘ +``` + +## positionCaseInsensitiveUTF8 {#positioncaseinsensitiveutf8} + +Le même que [positionUTF8](#positionutf8) mais est sensible à la casse. Renvoie la position (en points Unicode) de la sous-chaîne trouvée dans la chaîne, à partir de 1. + +Fonctionne sous l'hypothèse que la chaîne contient un ensemble d'octets représentant un texte codé en UTF-8. Si cette hypothèse n'est pas remplie, la fonction ne lance pas d'exception et renvoie un résultat inattendu. Si le caractère peut être représenté en utilisant deux points Unicode, il en utilisera deux et ainsi de suite. + +**Syntaxe** + +``` sql +positionCaseInsensitiveUTF8(haystack, needle) +``` + +**Paramètre** + +- `haystack` — string, in which substring will to be searched. [Chaîne](../syntax.md#syntax-string-literal). +- `needle` — substring to be searched. [Chaîne](../syntax.md#syntax-string-literal). + +**Valeur renvoyée** + +- Position de départ dans les points Unicode (à partir de 1), si la sous-chaîne a été trouvée. +- 0, si la sous-chaîne n'a pas été trouvé. + +Type: `Integer`. + +**Exemple** + +Requête: + +``` sql +SELECT positionCaseInsensitiveUTF8('Привет, мир!', 'Мир') +``` + +Résultat: + +``` text +┌─positionCaseInsensitiveUTF8('Привет, мир!', 'Мир')─┐ +│ 9 │ +└────────────────────────────────────────────────────┘ +``` + +## multirecherchallpositions {#multisearchallpositions} + +Le même que [position](string_search_functions.md#position) mais les retours `Array` des positions (en octets) des sous-chaînes correspondantes trouvées dans la chaîne. Les Positions sont indexées à partir de 1. + +La recherche est effectuée sur des séquences d'octets sans tenir compte de l'encodage et du classement des chaînes. + +- Pour une recherche ASCII insensible à la casse, utilisez la fonction `multiSearchAllPositionsCaseInsensitive`. +- Pour la recherche en UTF-8, Utilisez la fonction [multiSearchAllPositionsUTF8](#multiSearchAllPositionsUTF8). +- Pour la recherche UTF-8 insensible à la casse, utilisez la fonction multiSearchAllPositionsCaseInsensitiveutf8. + +**Syntaxe** + +``` sql +multiSearchAllPositions(haystack, [needle1, needle2, ..., needlen]) +``` + +**Paramètre** + +- `haystack` — string, in which substring will to be searched. [Chaîne](../syntax.md#syntax-string-literal). +- `needle` — substring to be searched. [Chaîne](../syntax.md#syntax-string-literal). + +**Valeurs renvoyées** + +- Tableau de positions de départ en octets (à partir de 1), si la sous-chaîne correspondante a été trouvée et 0 si elle n'est pas trouvée. + +**Exemple** + +Requête: + +``` sql +SELECT multiSearchAllPositions('Hello, World!', ['hello', '!', 'world']) +``` + +Résultat: + +``` text +┌─multiSearchAllPositions('Hello, World!', ['hello', '!', 'world'])─┐ +│ [0,13,0] │ +└───────────────────────────────────────────────────────────────────┘ +``` + +## multiSearchAllPositionsUTF8 {#multiSearchAllPositionsUTF8} + +Voir `multiSearchAllPositions`. + +## multiSearchFirstPosition(botte de foin, \[aiguille1, aiguille2, …, needleet\]) {#multisearchfirstposition} + +Le même que `position` mais renvoie le décalage le plus à gauche de la chaîne `haystack` et qui correspond à certains des aiguilles. + +Pour une recherche insensible à la casse ou/et au format UTF-8, utilisez les fonctions `multiSearchFirstPositionCaseInsensitive, multiSearchFirstPositionUTF8, multiSearchFirstPositionCaseInsensitiveUTF8`. + +## multiSearchFirstIndex(botte de foin, \[aiguille1, aiguille2, …, needleet\]) {#multisearchfirstindexhaystack-needle1-needle2-needlen} + +Renvoie l'index `i` (à partir de 1) de l'aiguille trouvée la plus à gaucheje dans la chaîne `haystack` et 0 sinon. + +Pour une recherche insensible à la casse ou/et au format UTF-8, utilisez les fonctions `multiSearchFirstIndexCaseInsensitive, multiSearchFirstIndexUTF8, multiSearchFirstIndexCaseInsensitiveUTF8`. + +## multiSearchAny(botte de foin, \[aiguille1, aiguille2, …, needleet\]) {#function-multisearchany} + +Renvoie 1, si au moins une aiguille de chaîneje correspond à la chaîne `haystack` et 0 sinon. + +Pour une recherche insensible à la casse ou/et au format UTF-8, utilisez les fonctions `multiSearchAnyCaseInsensitive, multiSearchAnyUTF8, multiSearchAnyCaseInsensitiveUTF8`. + +!!! note "Note" + Dans tous les `multiSearch*` fonctions le nombre d'aiguilles doit être d'au moins 28 en raison de la spécification de mise en œuvre. + +## match (botte de foin, motif) {#matchhaystack-pattern} + +Vérifie si la chaîne correspond au `pattern` expression régulière. Un `re2` expression régulière. Le [syntaxe](https://github.com/google/re2/wiki/Syntax) de la `re2` les expressions régulières sont plus limitées que la syntaxe des expressions régulières Perl. + +Renvoie 0 si elle ne correspond pas, ou 1 si elle correspond. + +Notez que le symbole antislash (`\`) est utilisé pour s'échapper dans l'expression régulière. Le même symbole est utilisé pour échapper dans les littéraux de chaîne. Donc, pour échapper au symbole dans une expression régulière, vous devez écrire deux barres obliques inverses ( \\ ) dans un littéral de chaîne. + +L'expression régulière travaille à la chaîne, comme si c'est un ensemble d'octets. L'expression régulière ne peut pas contenir d'octets nuls. +Pour que les modèles recherchent des sous-chaînes dans une chaîne, il est préférable D'utiliser LIKE ou ‘position’ depuis ils travaillent beaucoup plus vite. + +## multiMatchAny(botte de foin, \[motif1, modèle2, …, patternet\]) {#multimatchanyhaystack-pattern1-pattern2-patternn} + +Le même que `match` mais renvoie 0 si aucune des expressions régulières sont appariés et 1 si l'un des modèles les matchs. Il utilise [hyperscan](https://github.com/intel/hyperscan) bibliothèque. Pour que les modèles recherchent des sous-chaînes dans une chaîne, il est préférable d'utiliser `multiSearchAny` comme cela fonctionne beaucoup plus vite. + +!!! note "Note" + La longueur de l'un des `haystack` la chaîne doit être inférieure à 232 octets sinon l'exception est levée. Cette restriction a lieu en raison de l'API hyperscan. + +## multiMatchAnyIndex(botte de foin, \[motif1, modèle2, …, patternet\]) {#multimatchanyindexhaystack-pattern1-pattern2-patternn} + +Le même que `multiMatchAny` mais retourne un index qui correspond à la botte de foin. + +## multiMatchAllIndices(botte de foin, \[motif1, modèle2, …, patternet\]) {#multimatchallindiceshaystack-pattern1-pattern2-patternn} + +Le même que `multiMatchAny`, mais renvoie le tableau de tous les indices qui correspondent à la botte de foin dans n'importe quel ordre. + +## multiFuzzyMatchAny(botte de foin, distance, \[motif1, modèle2, …, patternet\]) {#multifuzzymatchanyhaystack-distance-pattern1-pattern2-patternn} + +Le même que `multiMatchAny`, mais renvoie 1 si un motif correspond à la botte de foin dans une constante [distance d'édition](https://en.wikipedia.org/wiki/Edit_distance). Cette fonction est également en mode expérimental et peut être extrêmement lente. Pour plus d'informations, voir [documentation hyperscan](https://intel.github.io/hyperscan/dev-reference/compilation.html#approximate-matching). + +## multiFuzzyMatchAnyIndex(botte de foin, distance, \[motif1, modèle2, …, patternet\]) {#multifuzzymatchanyindexhaystack-distance-pattern1-pattern2-patternn} + +Le même que `multiFuzzyMatchAny`, mais renvoie tout index qui correspond à la botte de foin à une distance d'édition constante. + +## multiFuzzyMatchAllIndices(botte de foin, distance, \[motif1, modèle2, …, patternet\]) {#multifuzzymatchallindiceshaystack-distance-pattern1-pattern2-patternn} + +Le même que `multiFuzzyMatchAny`, mais renvoie le tableau de tous les indices dans n'importe quel ordre qui correspond à la botte de foin à une distance d'édition constante. + +!!! note "Note" + `multiFuzzyMatch*` les fonctions ne prennent pas en charge les expressions régulières UTF-8, et ces expressions sont traitées comme des octets en raison de la restriction hyperscan. + +!!! note "Note" + Pour désactiver toutes les fonctions qui utilisent hyperscan, utilisez le réglage `SET allow_hyperscan = 0;`. + +## extrait(botte de foin, motif) {#extracthaystack-pattern} + +Extraits d'un fragment d'une chaîne à l'aide d'une expression régulière. Si ‘haystack’ ne correspond pas à l' ‘pattern’ regex, une chaîne vide est renvoyée. Si l'expression rationnelle ne contient pas de sous-modèles, elle prend le fragment qui correspond à l'expression rationnelle entière. Sinon, il prend le fragment qui correspond au premier sous-masque. + +## extractAll(botte de foin, motif) {#extractallhaystack-pattern} + +Extrait tous les fragments d'une chaîne à l'aide d'une expression régulière. Si ‘haystack’ ne correspond pas à l' ‘pattern’ regex, une chaîne vide est renvoyée. Renvoie un tableau de chaînes composé de toutes les correspondances à l'expression rationnelle. En général, le comportement est le même que le ‘extract’ fonction (il prend le premier sous-masque, ou l'expression entière s'il n'y a pas de sous-masque). + +## comme (botte de foin, motif), botte de foin comme opérateur de motif {#function-like} + +Vérifie si une chaîne correspond à une expression régulière simple. +L'expression régulière peut contenir les métasymboles `%` et `_`. + +`%` indique n'importe quelle quantité d'octets (y compris zéro caractère). + +`_` indique un octet. + +Utilisez la barre oblique inverse (`\`) pour échapper aux métasymboles. Voir la note sur l'échappement dans la description du ‘match’ fonction. + +Pour les expressions régulières comme `%needle%`, le code est plus optimale et fonctionne aussi vite que le `position` fonction. +Pour d'autres expressions régulières, le code est le même que pour la ‘match’ fonction. + +## notLike (botte de foin, motif), botte de foin pas comme opérateur de motif {#function-notlike} + +La même chose que ‘like’ mais négative. + +## ngramDistance(botte de foin, aiguille) {#ngramdistancehaystack-needle} + +Calcule la distance de 4 grammes entre `haystack` et `needle`: counts the symmetric difference between two multisets of 4-grams and normalizes it by the sum of their cardinalities. Returns float number from 0 to 1 – the closer to zero, the more strings are similar to each other. If the constant `needle` ou `haystack` est plus de 32Kb, jette une exception. Si une partie de la non-constante `haystack` ou `needle` les chaînes sont plus que 32Kb, la distance est toujours un. + +Pour une recherche insensible à la casse ou/et au format UTF-8, utilisez les fonctions `ngramDistanceCaseInsensitive, ngramDistanceUTF8, ngramDistanceCaseInsensitiveUTF8`. + +## ngramSearch(botte de foin, aiguille) {#ngramsearchhaystack-needle} + +Même que `ngramDistance` mais calcule la différence non symétrique entre `needle` et `haystack` – the number of n-grams from needle minus the common number of n-grams normalized by the number of `needle` n-grammes. Le plus proche d'un, le plus probable `needle` est dans le `haystack`. Peut être utile pour la recherche de chaîne floue. + +Pour une recherche insensible à la casse ou/et au format UTF-8, utilisez les fonctions `ngramSearchCaseInsensitive, ngramSearchUTF8, ngramSearchCaseInsensitiveUTF8`. + +!!! note "Note" + For UTF-8 case we use 3-gram distance. All these are not perfectly fair n-gram distances. We use 2-byte hashes to hash n-grams and then calculate the (non-)symmetric difference between these hash tables – collisions may occur. With UTF-8 case-insensitive format we do not use fair `tolower` function – we zero the 5-th bit (starting from zero) of each codepoint byte and first bit of zeroth byte if bytes more than one – this works for Latin and mostly for all Cyrillic letters. + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/string_search_functions/) diff --git a/docs/fr/query_language/functions/type_conversion_functions.md b/docs/fr/query_language/functions/type_conversion_functions.md new file mode 100644 index 00000000000..23c84e9fb40 --- /dev/null +++ b/docs/fr/query_language/functions/type_conversion_functions.md @@ -0,0 +1,423 @@ +--- +machine_translated: true +--- + +# Fonctions De Conversion De Type {#type-conversion-functions} + +## Problèmes courants des Conversions numériques {#numeric-conversion-issues} + +Lorsque vous convertissez une valeur d'un type de données à un autre, vous devez vous rappeler que dans le cas courant, il s'agit d'une opération dangereuse qui peut entraîner une perte de données. Une perte de données peut se produire si vous essayez d'ajuster la valeur d'un type de données plus grand à un type de données plus petit, ou si vous convertissez des valeurs entre différents types de données. + +ClickHouse a le [même comportement que les programmes C++ ](https://en.cppreference.com/w/cpp/language/implicit_conversion). + +## toInt (8/16/32/64) {#toint8163264} + +Convertit une valeur d'entrée en [Int](../../data_types/int_uint.md) type de données. Cette fonction comprend: + +- `toInt8(expr)` — Results in the `Int8` type de données. +- `toInt16(expr)` — Results in the `Int16` type de données. +- `toInt32(expr)` — Results in the `Int32` type de données. +- `toInt64(expr)` — Results in the `Int64` type de données. + +**Paramètre** + +- `expr` — [Expression](../syntax.md#syntax-expressions) renvoyer un nombre ou une chaîne avec la représentation décimale d'un nombre. Les représentations binaires, octales et hexadécimales des nombres ne sont pas prises en charge. Les zéros principaux sont dépouillés. + +**Valeur renvoyée** + +Valeur entière dans le `Int8`, `Int16`, `Int32`, ou `Int64` type de données. + +Fonctions d'utilisation [l'arrondi vers zéro](https://en.wikipedia.org/wiki/Rounding#Rounding_towards_zero), ce qui signifie qu'ils tronquent des chiffres fractionnaires de nombres. + +Le comportement des fonctions pour le [NaN et Inf](../../data_types/float.md#data_type-float-nan-inf) arguments est indéfini. Rappelez-vous sur [problèmes de conversion numérique](#numeric-conversion-issues), lorsque vous utilisez les fonctions. + +**Exemple** + +``` sql +SELECT toInt64(nan), toInt32(32), toInt16('16'), toInt8(8.8) +``` + +``` text +┌─────────toInt64(nan)─┬─toInt32(32)─┬─toInt16('16')─┬─toInt8(8.8)─┐ +│ -9223372036854775808 │ 32 │ 16 │ 8 │ +└──────────────────────┴─────────────┴───────────────┴─────────────┘ +``` + +## toInt (8/16/32/64)OrZero {#toint8163264orzero} + +Il prend un argument de type String et essaie de l'analyser en Int (8 \| 16 \| 32 \| 64). En cas d'échec, renvoie 0. + +**Exemple** + +``` sql +select toInt64OrZero('123123'), toInt8OrZero('123qwe123') +``` + +``` text +┌─toInt64OrZero('123123')─┬─toInt8OrZero('123qwe123')─┐ +│ 123123 │ 0 │ +└─────────────────────────┴───────────────────────────┘ +``` + +## toInt (8/16/32/64)OrNull {#toint8163264ornull} + +Il prend un argument de type String et essaie de l'analyser en Int (8 \| 16 \| 32 \| 64). En cas d'échec, renvoie NULL. + +**Exemple** + +``` sql +select toInt64OrNull('123123'), toInt8OrNull('123qwe123') +``` + +``` text +┌─toInt64OrNull('123123')─┬─toInt8OrNull('123qwe123')─┐ +│ 123123 │ ᴺᵁᴸᴸ │ +└─────────────────────────┴───────────────────────────┘ +``` + +## toUInt (8/16/32/64) {#touint8163264} + +Convertit une valeur d'entrée en [UInt](../../data_types/int_uint.md) type de données. Cette fonction comprend: + +- `toUInt8(expr)` — Results in the `UInt8` type de données. +- `toUInt16(expr)` — Results in the `UInt16` type de données. +- `toUInt32(expr)` — Results in the `UInt32` type de données. +- `toUInt64(expr)` — Results in the `UInt64` type de données. + +**Paramètre** + +- `expr` — [Expression](../syntax.md#syntax-expressions) renvoyer un nombre ou une chaîne avec la représentation décimale d'un nombre. Les représentations binaires, octales et hexadécimales des nombres ne sont pas prises en charge. Les zéros principaux sont dépouillés. + +**Valeur renvoyée** + +Valeur entière dans le `UInt8`, `UInt16`, `UInt32`, ou `UInt64` type de données. + +Fonctions d'utilisation [l'arrondi vers zéro](https://en.wikipedia.org/wiki/Rounding#Rounding_towards_zero), ce qui signifie qu'ils tronquent des chiffres fractionnaires de nombres. + +Le comportement des fonctions pour les agruments négatifs et pour le [NaN et Inf](../../data_types/float.md#data_type-float-nan-inf) arguments est indéfini. Si vous passez une chaîne avec un nombre négatif, par exemple `'-32'`, ClickHouse soulève une exception. Rappelez-vous sur [problèmes de conversion numérique](#numeric-conversion-issues), lorsque vous utilisez les fonctions. + +**Exemple** + +``` sql +SELECT toUInt64(nan), toUInt32(-32), toUInt16('16'), toUInt8(8.8) +``` + +``` text +┌───────toUInt64(nan)─┬─toUInt32(-32)─┬─toUInt16('16')─┬─toUInt8(8.8)─┐ +│ 9223372036854775808 │ 4294967264 │ 16 │ 8 │ +└─────────────────────┴───────────────┴────────────────┴──────────────┘ +``` + +## toUInt (8/16/32/64)OrZero {#touint8163264orzero} + +## toUInt (8/16/32/64)OrNull {#touint8163264ornull} + +## toFloat (32/64) {#tofloat3264} + +## toFloat (32/64)OrZero {#tofloat3264orzero} + +## toFloat (32/64) OrNull {#tofloat3264ornull} + +## jour {#todate} + +## toDateOrZero {#todateorzero} + +## toDateOrNull {#todateornull} + +## toDateTime {#todatetime} + +## toDateTimeOrZero {#todatetimeorzero} + +## toDateTimeOrNull {#todatetimeornull} + +## toDecimal (32/64/128) {#todecimal3264128} + +Convertir `value` à l' [Décimal](../../data_types/decimal.md) type de données avec précision de `S`. Le `value` peut être un nombre ou une chaîne. Le `S` (l'échelle) paramètre spécifie le nombre de décimales. + +- `toDecimal32(value, S)` +- `toDecimal64(value, S)` +- `toDecimal128(value, S)` + +## toDecimal (32/64/128) OrNull {#todecimal3264128ornull} + +Convertit une chaîne d'entrée en [Nullable (Décimal (P, S))](../../data_types/decimal.md) valeur de type de données. Cette famille de fonctions comprennent: + +- `toDecimal32OrNull(expr, S)` — Results in `Nullable(Decimal32(S))` type de données. +- `toDecimal64OrNull(expr, S)` — Results in `Nullable(Decimal64(S))` type de données. +- `toDecimal128OrNull(expr, S)` — Results in `Nullable(Decimal128(S))` type de données. + +Ces fonctions devraient être utilisées à la place de `toDecimal*()` fonctions, si vous préférez obtenir un `NULL` la valeur au lieu d'une exception dans le cas d'une valeur d'entrée erreur d'analyse. + +**Paramètre** + +- `expr` — [Expression](../syntax.md#syntax-expressions), retourne une valeur dans l' [Chaîne](../../data_types/string.md) type de données. ClickHouse attend la représentation textuelle du nombre décimal. Exemple, `'1.111'`. +- `S` — Scale, the number of decimal places in the resulting value. + +**Valeur renvoyée** + +Une valeur dans l' `Nullable(Decimal(P,S))` type de données. La valeur contient: + +- Numéro `S` décimales, si ClickHouse interprète la chaîne d'entrée comme un nombre. +- `NULL` si ClickHouse ne peut pas interpréter la chaîne d'entrée comme un nombre ou si le nombre d'entrée contient plus de `S` décimale. + +**Exemple** + +``` sql +SELECT toDecimal32OrNull(toString(-1.111), 5) AS val, toTypeName(val) +``` + +``` text +┌──────val─┬─toTypeName(toDecimal32OrNull(toString(-1.111), 5))─┐ +│ -1.11100 │ Nullable(Decimal(9, 5)) │ +└──────────┴────────────────────────────────────────────────────┘ +``` + +``` sql +SELECT toDecimal32OrNull(toString(-1.111), 2) AS val, toTypeName(val) +``` + +``` text +┌──val─┬─toTypeName(toDecimal32OrNull(toString(-1.111), 2))─┐ +│ ᴺᵁᴸᴸ │ Nullable(Decimal(9, 2)) │ +└──────┴────────────────────────────────────────────────────┘ +``` + +## toDecimal (32/64/128)OrZero {#todecimal3264128orzero} + +Convertit une valeur d'entrée en [Decimal(P,S)](../../data_types/decimal.md) type de données. Cette famille de fonctions comprennent: + +- `toDecimal32OrZero( expr, S)` — Results in `Decimal32(S)` type de données. +- `toDecimal64OrZero( expr, S)` — Results in `Decimal64(S)` type de données. +- `toDecimal128OrZero( expr, S)` — Results in `Decimal128(S)` type de données. + +Ces fonctions devraient être utilisées à la place de `toDecimal*()` fonctions, si vous préférez obtenir un `0` la valeur au lieu d'une exception dans le cas d'une valeur d'entrée erreur d'analyse. + +**Paramètre** + +- `expr` — [Expression](../syntax.md#syntax-expressions), retourne une valeur dans l' [Chaîne](../../data_types/string.md) type de données. ClickHouse attend la représentation textuelle du nombre décimal. Exemple, `'1.111'`. +- `S` — Scale, the number of decimal places in the resulting value. + +**Valeur renvoyée** + +Une valeur dans l' `Nullable(Decimal(P,S))` type de données. La valeur contient: + +- Numéro `S` décimales, si ClickHouse interprète la chaîne d'entrée comme un nombre. +- 0 avec `S` décimales, si ClickHouse ne peut pas interpréter la chaîne d'entrée comme un nombre ou si le nombre d'entrée contient plus de `S` décimale. + +**Exemple** + +``` sql +SELECT toDecimal32OrZero(toString(-1.111), 5) AS val, toTypeName(val) +``` + +``` text +┌──────val─┬─toTypeName(toDecimal32OrZero(toString(-1.111), 5))─┐ +│ -1.11100 │ Decimal(9, 5) │ +└──────────┴────────────────────────────────────────────────────┘ +``` + +``` sql +SELECT toDecimal32OrZero(toString(-1.111), 2) AS val, toTypeName(val) +``` + +``` text +┌──val─┬─toTypeName(toDecimal32OrZero(toString(-1.111), 2))─┐ +│ 0.00 │ Decimal(9, 2) │ +└──────┴────────────────────────────────────────────────────┘ +``` + +## toString {#tostring} + +Fonctions de conversion entre des nombres, des chaînes (mais pas des chaînes fixes), des dates et des dates avec des heures. +Toutes ces fonctions acceptent un argument. + +Lors de la conversion vers ou à partir d'une chaîne, la valeur est formatée ou analysée en utilisant les mêmes règles que pour le format TabSeparated (et presque tous les autres formats de texte). Si la chaîne ne peut pas être analysée, une exception est levée et la demande est annulée. + +Lors de la conversion de dates en nombres ou vice versa, la date correspond au nombre de jours depuis le début de L'époque Unix. +Lors de la conversion de dates avec des heures en nombres ou vice versa, la date avec l'heure correspond au nombre de secondes depuis le début de L'époque Unix. + +Les formats date et date-avec-heure pour les fonctions toDate/toDateTime sont définis comme suit: + +``` text +YYYY-MM-DD +YYYY-MM-DD hh:mm:ss +``` + +À titre d'exception, si vous convertissez des types numériques UInt32, Int32, UInt64 ou Int64 à Date, et si le nombre est supérieur ou égal à 65536, le nombre est interprété comme un horodatage Unix (et non comme le nombre de jours) et est arrondi à la date. Cela permet de prendre en charge l'occurrence commune de l'écriture ‘toDate(unix\_timestamp)’, qui autrement serait une erreur et nécessiterait d'écrire le plus lourd ‘toDate(toDateTime(unix\_timestamp))’. + +La Conversion entre une date et une date avec l'heure est effectuée de manière naturelle: en ajoutant une heure nulle ou en supprimant l'heure. + +La Conversion entre types numériques utilise les mêmes règles que les affectations entre différents types numériques en C++. + +De plus, la fonction ToString de L'argument DateTime peut prendre un deuxième argument de chaîne contenant le nom du fuseau horaire. Exemple: `Asia/Yekaterinburg` Dans ce cas, l'heure est formatée en fonction du fuseau horaire spécifié. + +``` sql +SELECT + now() AS now_local, + toString(now(), 'Asia/Yekaterinburg') AS now_yekat +``` + +``` text +┌───────────now_local─┬─now_yekat───────────┐ +│ 2016-06-15 00:11:21 │ 2016-06-15 02:11:21 │ +└─────────────────────┴─────────────────────┘ +``` + +Voir aussi l' `toUnixTimestamp` fonction. + +## toFixedString (s, N) {#tofixedstrings-n} + +Convertit un argument de type String en un type FixedString (N) (une chaîne de longueur fixe N). N doit être une constante. +Si la chaîne a moins d'octets que N, elle est passée avec des octets null à droite. Si la chaîne a plus d'octets que N, une exception est levée. + +## toStringCutToZero(s) {#tostringcuttozeros} + +Accepte un argument String ou FixedString. Renvoie la chaîne avec le contenu tronqué au premier octet zéro trouvé. + +Exemple: + +``` sql +SELECT toFixedString('foo', 8) AS s, toStringCutToZero(s) AS s_cut +``` + +``` text +┌─s─────────────┬─s_cut─┐ +│ foo\0\0\0\0\0 │ foo │ +└───────────────┴───────┘ +``` + +``` sql +SELECT toFixedString('foo\0bar', 8) AS s, toStringCutToZero(s) AS s_cut +``` + +``` text +┌─s──────────┬─s_cut─┐ +│ foo\0bar\0 │ foo │ +└────────────┴───────┘ +``` + +## reinterpretAsUInt (8/16/32/64) {#reinterpretasuint8163264} + +## reinterpretAsInt (8/16/32/64) {#reinterpretasint8163264} + +## reinterpretAsFloat (32/64) {#reinterpretasfloat3264} + +## réinterprétasdate {#reinterpretasdate} + +## reinterpretAsDateTime {#reinterpretasdatetime} + +Ces fonctions acceptent une chaîne et interprètent les octets placés au début de la chaîne comme un nombre dans l'ordre de l'hôte (little endian). Si la chaîne n'est pas assez longue, les fonctions fonctionnent comme si la chaîne était remplie avec le nombre nécessaire d'octets nuls. Si la chaîne est plus longue que nécessaire, les octets supplémentaires sont ignorés. Une date est interprétée comme le nombre de jours depuis le début de l'Époque Unix, et une date avec le temps, est interprété comme le nombre de secondes écoulées depuis le début de l'Époque Unix. + +## reinterpretAsString {#type_conversion_functions-reinterpretAsString} + +Cette fonction accepte un nombre ou une date ou une date avec l'heure, et renvoie une chaîne contenant des octets représentant la valeur correspondante dans l'ordre de l'hôte (little endian). Les octets nuls sont supprimés de la fin. Par exemple, une valeur de type uint32 de 255 est une chaîne longue d'un octet. + +## reinterpretAsFixedString {#reinterpretasfixedstring} + +Cette fonction accepte un nombre ou une date ou une date avec l'heure, et renvoie une chaîne fixe contenant des octets représentant la valeur correspondante dans l'ordre de l'hôte (little endian). Les octets nuls sont supprimés de la fin. Par exemple, une valeur de type uint32 de 255 est une chaîne fixe longue d'un octet. + +## CAST (x, t) {#type_conversion_function-cast} + +Convertir ‘x’ à l' ‘t’ type de données. La syntaxe CAST (X comme t) est également prise en charge. + +Exemple: + +``` sql +SELECT + '2016-06-15 23:00:00' AS timestamp, + CAST(timestamp AS DateTime) AS datetime, + CAST(timestamp AS Date) AS date, + CAST(timestamp, 'String') AS string, + CAST(timestamp, 'FixedString(22)') AS fixed_string +``` + +``` text +┌─timestamp───────────┬────────────datetime─┬───────date─┬─string──────────────┬─fixed_string──────────────┐ +│ 2016-06-15 23:00:00 │ 2016-06-15 23:00:00 │ 2016-06-15 │ 2016-06-15 23:00:00 │ 2016-06-15 23:00:00\0\0\0 │ +└─────────────────────┴─────────────────────┴────────────┴─────────────────────┴───────────────────────────┘ +``` + +La Conversion en FixedString (N) ne fonctionne que pour les arguments de type String ou FixedString (N). + +Type conversion en [Nullable](../../data_types/nullable.md) et le dos est pris en charge. Exemple: + +``` sql +SELECT toTypeName(x) FROM t_null +``` + +``` text +┌─toTypeName(x)─┐ +│ Int8 │ +│ Int8 │ +└───────────────┘ +``` + +``` sql +SELECT toTypeName(CAST(x, 'Nullable(UInt16)')) FROM t_null +``` + +``` text +┌─toTypeName(CAST(x, 'Nullable(UInt16)'))─┐ +│ Nullable(UInt16) │ +│ Nullable(UInt16) │ +└─────────────────────────────────────────┘ +``` + +## toInterval (année / trimestre / Mois / Semaine / Jour / Heure / Minute / Seconde) {#function-tointerval} + +Convertit un argument de type Number en [Intervalle](../../data_types/special_data_types/interval.md) type de données. + +**Syntaxe** + +``` sql +toIntervalSecond(number) +toIntervalMinute(number) +toIntervalHour(number) +toIntervalDay(number) +toIntervalWeek(number) +toIntervalMonth(number) +toIntervalQuarter(number) +toIntervalYear(number) +``` + +**Paramètre** + +- `number` — Duration of interval. Positive integer number. + +**Valeurs renvoyées** + +- La valeur de `Interval` type de données. + +**Exemple** + +``` sql +WITH + toDate('2019-01-01') AS date, + INTERVAL 1 WEEK AS interval_week, + toIntervalWeek(1) AS interval_to_week +SELECT + date + interval_week, + date + interval_to_week +``` + +``` text +┌─plus(date, interval_week)─┬─plus(date, interval_to_week)─┐ +│ 2019-01-08 │ 2019-01-08 │ +└───────────────────────────┴──────────────────────────────┘ +``` + +## parseDateTimeBestEffort {#type_conversion_functions-parsedatetimebesteffort} + +Analysez un argument de type number en un type Date ou DateTime. +différent de toDate et toDateTime, parseDateTimeBestEffort peut progresser format de date plus complexe. +Pour plus d'informations, voir le lien: [Format De Date Complexe](https://xkcd.com/1179/) + +## parseDateTimeBestEffortOrNull {#parsedatetimebesteffortornull} + +De même que pour [parseDateTimeBestEffort](#type_conversion_functions-parsedatetimebesteffort) sauf qu'il renvoie null lorsqu'il rencontre un format de date qui ne peut pas être traité. + +## parseDateTimeBestEffortOrZero {#parsedatetimebesteffortorzero} + +De même que pour [parseDateTimeBestEffort](#type_conversion_functions-parsedatetimebesteffort) sauf qu'il renvoie une date zéro ou une date zéro lorsqu'il rencontre un format de date qui ne peut pas être traité. + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/type_conversion_functions/) diff --git a/docs/fr/query_language/functions/url_functions.md b/docs/fr/query_language/functions/url_functions.md new file mode 100644 index 00000000000..72e239ad38f --- /dev/null +++ b/docs/fr/query_language/functions/url_functions.md @@ -0,0 +1,206 @@ +--- +machine_translated: true +--- + +# Fonctions pour travailler avec des URL {#functions-for-working-with-urls} + +Toutes ces fonctions ne suivent pas la RFC. Ils sont simplifiés au maximum pour améliorer les performances. + +## Fonctions qui extraient des parties d'une URL {#functions-that-extract-parts-of-a-url} + +Si la partie pertinente n'est pas présente dans une URL, une chaîne vide est renvoyée. + +### protocole {#protocol} + +Extrait le protocole d'une URL. + +Examples of typical returned values: http, https, ftp, mailto, tel, magnet… + +### domaine {#domain} + +Extrait le nom d'hôte d'une URL. + +``` sql +domain(url) +``` + +**Paramètre** + +- `url` — URL. Type: [Chaîne](../../data_types/string.md). + +L'URL peut être spécifiée avec ou sans schéma. Exemple: + +``` text +svn+ssh://some.svn-hosting.com:80/repo/trunk +some.svn-hosting.com:80/repo/trunk +https://yandex.com/time/ +``` + +Pour ces exemples, le `domain` la fonction renvoie les résultats suivants: + +``` text +some.svn-hosting.com +some.svn-hosting.com +yandex.com +``` + +**Valeurs renvoyées** + +- Nom d'hôte. Si ClickHouse peut analyser la chaîne d'entrée en tant QU'URL. +- Chaîne vide. Si ClickHouse ne peut pas analyser la chaîne d'entrée en tant QU'URL. + +Type: `String`. + +**Exemple** + +``` sql +SELECT domain('svn+ssh://some.svn-hosting.com:80/repo/trunk') +``` + +``` text +┌─domain('svn+ssh://some.svn-hosting.com:80/repo/trunk')─┐ +│ some.svn-hosting.com │ +└────────────────────────────────────────────────────────┘ +``` + +### domainWithoutWWW {#domainwithoutwww} + +Renvoie le domaine et ne supprime pas plus d'un ‘www.’ dès le début de celui-ci, si présent. + +### topLevelDomain {#topleveldomain} + +Extrait le domaine de premier niveau d'une URL. + +``` sql +topLevelDomain(url) +``` + +**Paramètre** + +- `url` — URL. Type: [Chaîne](../../data_types/string.md). + +L'URL peut être spécifiée avec ou sans schéma. Exemple: + +``` text +svn+ssh://some.svn-hosting.com:80/repo/trunk +some.svn-hosting.com:80/repo/trunk +https://yandex.com/time/ +``` + +**Valeurs renvoyées** + +- Nom de domaine. Si ClickHouse peut analyser la chaîne d'entrée en tant QU'URL. +- Chaîne vide. Si ClickHouse ne peut pas analyser la chaîne d'entrée en tant QU'URL. + +Type: `String`. + +**Exemple** + +``` sql +SELECT topLevelDomain('svn+ssh://www.some.svn-hosting.com:80/repo/trunk') +``` + +``` text +┌─topLevelDomain('svn+ssh://www.some.svn-hosting.com:80/repo/trunk')─┐ +│ com │ +└────────────────────────────────────────────────────────────────────┘ +``` + +### firstSignificantSubdomain {#firstsignificantsubdomain} + +Renvoie la “first significant subdomain”. C'est un concept non standard spécifique à Yandex.Metrica. Le premier sous-domaine significatif est un domaine de deuxième niveau s'il est ‘com’, ‘net’, ‘org’, ou ‘co’. Sinon, il est un domaine de troisième niveau. Exemple, `firstSignificantSubdomain (‘https://news.yandex.ru/’) = ‘yandex’, firstSignificantSubdomain (‘https://news.yandex.com.tr/’) = ‘yandex’`. La liste des “insignificant” les domaines de deuxième niveau et d'autres détails de mise en œuvre peuvent changer à l'avenir. + +### cutToFirstSignificantSubdomain {#cuttofirstsignificantsubdomain} + +Renvoie la partie du domaine qui inclut les sous-domaines de premier niveau “first significant subdomain” (voir l'explication ci-dessus). + +Exemple, `cutToFirstSignificantSubdomain('https://news.yandex.com.tr/') = 'yandex.com.tr'`. + +### chemin {#path} + +Retourne le chemin d'accès. Exemple: `/top/news.html` Le chemin n'inclut pas la chaîne de requête. + +### pathFull {#pathfull} + +La même chose que ci-dessus, mais y compris la chaîne de requête et le fragment. Exemple: / top / nouvelles.le html?page = 2 \# commentaires + +### queryString {#querystring} + +Retourne la chaîne de requête. Exemple: page = 1 & lr=213. query-string n'inclut pas le point d'interrogation initial, ainsi que \# et tout ce qui suit \#. + +### fragment {#fragment} + +Renvoie l'identificateur de fragment. fragment n'inclut pas le symbole de hachage initial. + +### queryStringAndFragment {#querystringandfragment} + +Renvoie la chaîne de requête et l'Identificateur de fragment. Exemple: page = 1 \# 29390. + +### extractURLParameter (URL, nom) {#extracturlparameterurl-name} + +Renvoie la valeur de la ‘name’ paramètre dans l'URL, le cas échéant. Sinon, une chaîne vide. S'il y a beaucoup de paramètres avec ce nom, il renvoie la première occurrence. Cette fonction fonctionne en supposant que le nom du paramètre est codé dans L'URL exactement de la même manière que dans l'argument passé. + +### extractURLParameters (URL) {#extracturlparametersurl} + +Renvoie un tableau de chaînes name = value correspondant aux paramètres D'URL. Les valeurs ne sont en aucun cas décodées. + +### extractURLParameterNames (URL) {#extracturlparameternamesurl} + +Retourne un tableau de chaînes de noms correspondant aux noms des paramètres d'URL. Les valeurs ne sont en aucun cas décodées. + +### URLHierarchy (URL) {#urlhierarchyurl} + +Retourne un tableau contenant L'URL, tronquée à la fin par les symboles /,? dans le chemin et la chaîne de requête. Les caractères séparateurs consécutifs sont comptés comme un. La coupe est faite dans la position après tous les caractères de séparation consécutifs. + +### URLPathHierarchy (URL) {#urlpathhierarchyurl} + +La même chose que ci-dessus, mais sans le protocole et l'hôte dans le résultat. Le / les élément (racine) n'est pas inclus. Exemple: la fonction est utilisée pour implémenter l'arborescence des rapports de L'URL dans Yandex. Métrique. + +``` text +URLPathHierarchy('https://example.com/browse/CONV-6788') = +[ + '/browse/', + '/browse/CONV-6788' +] +``` + +### decodeURLComponent (URL) {#decodeurlcomponenturl} + +Renvoie L'URL décodée. +Exemple: + +``` sql +SELECT decodeURLComponent('http://127.0.0.1:8123/?query=SELECT%201%3B') AS DecodedURL; +``` + +``` text +┌─DecodedURL─────────────────────────────┐ +│ http://127.0.0.1:8123/?query=SELECT 1; │ +└────────────────────────────────────────┘ +``` + +## Fonctions qui suppriment une partie D'une URL. {#functions-that-remove-part-of-a-url} + +Si L'URL n'a rien de similaire, L'URL reste inchangée. + +### cutWWW {#cutwww} + +Supprime pas plus d'une ‘www.’ depuis le début du domaine de L'URL, s'il est présent. + +### cutQueryString {#cutquerystring} + +Supprime la chaîne de requête. Le point d'interrogation est également supprimé. + +### cutFragment {#cutfragment} + +Supprime l'identificateur de fragment. Le signe est également supprimé. + +### couperystringandfragment {#cutquerystringandfragment} + +Supprime la chaîne de requête et l'Identificateur de fragment. Le point d'interrogation et le signe numérique sont également supprimés. + +### cutURLParameter (URL, nom) {#cuturlparameterurl-name} + +Supprime le ‘name’ Paramètre URL, si présent. Cette fonction fonctionne en supposant que le nom du paramètre est codé dans L'URL exactement de la même manière que dans l'argument passé. + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/url_functions/) diff --git a/docs/fr/query_language/functions/uuid_functions.md b/docs/fr/query_language/functions/uuid_functions.md new file mode 100644 index 00000000000..1cd5645b660 --- /dev/null +++ b/docs/fr/query_language/functions/uuid_functions.md @@ -0,0 +1,120 @@ +--- +machine_translated: true +--- + +# Fonctions pour travailler avec UUID {#functions-for-working-with-uuid} + +Les fonctions pour travailler avec UUID sont listées ci-dessous. + +## generateUUIDv4 {#uuid-function-generate} + +Génère le [UUID](../../data_types/uuid.md) de [la version 4](https://tools.ietf.org/html/rfc4122#section-4.4). + +``` sql +generateUUIDv4() +``` + +**Valeur renvoyée** + +La valeur de type UUID. + +**Exemple d'utilisation** + +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) ENGINE=TinyLog + +INSERT INTO t_uuid SELECT generateUUIDv4() + +SELECT * FROM t_uuid +``` + +``` text +┌────────────────────────────────────x─┐ +│ f4bf890f-f9dc-4332-ad5c-0c18e73f28e9 │ +└──────────────────────────────────────┘ +``` + +## toUUID (x) {#touuid-x} + +Convertit la valeur de type de chaîne en type UUID. + +``` sql +toUUID(String) +``` + +**Valeur renvoyée** + +La valeur de type UUID. + +**Exemple d'utilisation** + +``` sql +SELECT toUUID('61f0c404-5cb3-11e7-907b-a6006ad3dba0') AS uuid +``` + +``` text +┌─────────────────────────────────uuid─┐ +│ 61f0c404-5cb3-11e7-907b-a6006ad3dba0 │ +└──────────────────────────────────────┘ +``` + +## UUIDStringToNum {#uuidstringtonum} + +Accepte une chaîne contenant 36 caractères dans le format `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`, et le renvoie comme un ensemble d'octets dans un [FixedString (16)](../../data_types/fixedstring.md). + +``` sql +UUIDStringToNum(String) +``` + +**Valeur renvoyée** + +FixedString (16) + +**Exemples d'utilisation** + +``` sql +SELECT + '612f3c40-5d3b-217e-707b-6a546a3d7b29' AS uuid, + UUIDStringToNum(uuid) AS bytes +``` + +``` text + +┌─uuid─────────────────────────────────┬─bytes────────────┐ +│ 612f3c40-5d3b-217e-707b-6a546a3d7b29 │ a/<@];!~p{jTj={) │ +└──────────────────────────────────────┴──────────────────┘ +``` + +## UUIDNumToString {#uuidnumtostring} + +Accepte un [FixedString (16)](../../data_types/fixedstring.md) valeur, et renvoie une chaîne contenant 36 caractères au format texte. + +``` sql +UUIDNumToString(FixedString(16)) +``` + +**Valeur renvoyée** + +Chaîne. + +**Exemple d'utilisation** + +``` sql +SELECT + 'a/<@];!~p{jTj={)' AS bytes, + UUIDNumToString(toFixedString(bytes, 16)) AS uuid +``` + +``` text +┌─bytes────────────┬─uuid─────────────────────────────────┐ +│ a/<@];!~p{jTj={) │ 612f3c40-5d3b-217e-707b-6a546a3d7b29 │ +└──────────────────┴──────────────────────────────────────┘ +``` + +## Voir aussi {#see-also} + +- [dictGetUUID](ext_dict_functions.md#ext_dict_functions-other) + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/uuid_function/) diff --git a/docs/fr/query_language/functions/ym_dict_functions.md b/docs/fr/query_language/functions/ym_dict_functions.md new file mode 100644 index 00000000000..df4a6fc5c10 --- /dev/null +++ b/docs/fr/query_language/functions/ym_dict_functions.md @@ -0,0 +1,130 @@ +--- +machine_translated: true +--- + +# Fonctions pour travailler avec Yandex.Dictionnaires Metrica {#functions-for-working-with-yandex-metrica-dictionaries} + +Pour que les fonctions ci-dessous fonctionnent, la configuration du serveur doit spécifier les chemins et les adresses pour obtenir tous les Yandex.Dictionnaires Metrica. Les dictionnaires sont chargés au premier appel de l'une de ces fonctions. Si les listes de référence ne peuvent pas être chargées, une exception est levée. + +Pour plus d'informations sur la création de listes de références, consultez la section “Dictionaries”. + +## Plusieurs geobases {#multiple-geobases} + +ClickHouse soutient le travail avec plusieurs géobases alternatives (hiérarchies régionales) simultanément, afin de soutenir diverses perspectives sur les pays auxquels appartiennent certaines régions. + +Le ‘clickhouse-server’ config spécifie le fichier avec l'échelon régional::`/opt/geo/regions_hierarchy.txt` + +Outre ce fichier, il recherche également les fichiers à proximité qui ont le symbole \_ et tout suffixe ajouté au nom (avant l'extension de fichier). +Par exemple, il trouvera également le fichier `/opt/geo/regions_hierarchy_ua.txt` si présente. + +`ua` est appelée la clé du dictionnaire. Pour un dictionnaire sans suffixe, la clé est une chaîne vide. + +Tous les dictionnaires sont rechargés dans l'exécution (une fois toutes les secondes, comme défini dans le paramètre de configuration builtin\_dictionaries\_reload\_interval, ou une fois par heure par défaut). Cependant, la liste des dictionnaires disponibles est définie une fois, lorsque le serveur démarre. + +All functions for working with regions have an optional argument at the end – the dictionary key. It is referred to as the geobase. +Exemple: + +``` sql +regionToCountry(RegionID) – Uses the default dictionary: /opt/geo/regions_hierarchy.txt +regionToCountry(RegionID, '') – Uses the default dictionary: /opt/geo/regions_hierarchy.txt +regionToCountry(RegionID, 'ua') – Uses the dictionary for the 'ua' key: /opt/geo/regions_hierarchy_ua.txt +``` + +### regionToCity (id \[, geobase\]) {#regiontocityid-geobase} + +Accepts a UInt32 number – the region ID from the Yandex geobase. If this region is a city or part of a city, it returns the region ID for the appropriate city. Otherwise, returns 0. + +### regionToArea (id \[, geobase\]) {#regiontoareaid-geobase} + +Convertit une région en une zone (tapez 5 dans la géobase). Dans tous les autres cas, cette fonction est la même que ‘regionToCity’. + +``` sql +SELECT DISTINCT regionToName(regionToArea(toUInt32(number), 'ua')) +FROM system.numbers +LIMIT 15 +``` + +``` text +┌─regionToName(regionToArea(toUInt32(number), \'ua\'))─┐ +│ │ +│ Moscow and Moscow region │ +│ St. Petersburg and Leningrad region │ +│ Belgorod region │ +│ Ivanovsk region │ +│ Kaluga region │ +│ Kostroma region │ +│ Kursk region │ +│ Lipetsk region │ +│ Orlov region │ +│ Ryazan region │ +│ Smolensk region │ +│ Tambov region │ +│ Tver region │ +│ Tula region │ +└──────────────────────────────────────────────────────┘ +``` + +### regionToDistrict(id \[, geobase\]) {#regiontodistrictid-geobase} + +Convertit une région en district fédéral (type 4 dans la géobase). Dans tous les autres cas, cette fonction est la même que ‘regionToCity’. + +``` sql +SELECT DISTINCT regionToName(regionToDistrict(toUInt32(number), 'ua')) +FROM system.numbers +LIMIT 15 +``` + +``` text +┌─regionToName(regionToDistrict(toUInt32(number), \'ua\'))─┐ +│ │ +│ Central federal district │ +│ Northwest federal district │ +│ South federal district │ +│ North Caucases federal district │ +│ Privolga federal district │ +│ Ural federal district │ +│ Siberian federal district │ +│ Far East federal district │ +│ Scotland │ +│ Faroe Islands │ +│ Flemish region │ +│ Brussels capital region │ +│ Wallonia │ +│ Federation of Bosnia and Herzegovina │ +└──────────────────────────────────────────────────────────┘ +``` + +### regionToCountry (id \[, geobase\]) {#regiontocountryid-geobase} + +Convertit une région en un pays. Dans tous les autres cas, cette fonction est la même que ‘regionToCity’. +Exemple: `regionToCountry(toUInt32(213)) = 225` convertit Moscou (213) en Russie (225). + +### regionToContinent(id \[, géobase\]) {#regiontocontinentid-geobase} + +Convertit une région en continent. Dans tous les autres cas, cette fonction est la même que ‘regionToCity’. +Exemple: `regionToContinent(toUInt32(213)) = 10001` convertit Moscou (213) en Eurasie (10001). + +### regionToPopulation (id \[, geobase\]) {#regiontopopulationid-geobase} + +Obtient la population d'une région. +La population peut être enregistrée dans des fichiers avec la géobase. Voir la section “External dictionaries”. +Si la population n'est pas enregistrée pour la région, elle renvoie 0. +Dans la géobase Yandex, la population peut être enregistrée pour les régions enfants, mais pas pour les régions parentes. + +### regionIn(lhs, rhs \[, géobase\]) {#regioninlhs-rhs-geobase} + +Vérifie si un ‘lhs’ région appartient à une ‘rhs’ région. Renvoie un nombre UInt8 égal à 1 s'il appartient, Ou 0 s'il n'appartient pas. +The relationship is reflexive – any region also belongs to itself. + +### regionHierarchy (id \[, geobase\]) {#regionhierarchyid-geobase} + +Accepts a UInt32 number – the region ID from the Yandex geobase. Returns an array of region IDs consisting of the passed region and all parents along the chain. +Exemple: `regionHierarchy(toUInt32(213)) = [213,1,3,225,10001,10000]`. + +### regionToName(id \[, lang\]) {#regiontonameid-lang} + +Accepts a UInt32 number – the region ID from the Yandex geobase. A string with the name of the language can be passed as a second argument. Supported languages are: ru, en, ua, uk, by, kz, tr. If the second argument is omitted, the language ‘ru’ is used. If the language is not supported, an exception is thrown. Returns a string – the name of the region in the corresponding language. If the region with the specified ID doesn't exist, an empty string is returned. + +`ua` et `uk` les deux signifient ukrainien. + +[Article Original](https://clickhouse.tech/docs/en/query_language/functions/ym_dict_functions/) diff --git a/docs/fr/query_language/index.md b/docs/fr/query_language/index.md new file mode 100644 index 00000000000..cf135585ea4 --- /dev/null +++ b/docs/fr/query_language/index.md @@ -0,0 +1,13 @@ +--- +machine_translated: true +--- + +# Référence SQL {#sql-reference} + +- [SELECT](select.md) +- [INSERT INTO](insert_into.md) +- [CREATE](create.md) +- [ALTER](alter.md#query_language_queries_alter) +- [Autres types de requêtes](misc.md) + +[Article Original](https://clickhouse.tech/docs/en/query_language/) diff --git a/docs/fr/query_language/insert_into.md b/docs/fr/query_language/insert_into.md new file mode 100644 index 00000000000..9169c71240b --- /dev/null +++ b/docs/fr/query_language/insert_into.md @@ -0,0 +1,77 @@ +--- +machine_translated: true +--- + +## INSERT {#insert} + +L'ajout de données. + +Format de requête de base: + +``` sql +INSERT INTO [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v21, v22, v23), ... +``` + +La requête peut spécifier une liste de colonnes à insérer `[(c1, c2, c3)]`. Dans ce cas, le reste des colonnes sont remplis avec: + +- Les valeurs calculées à partir `DEFAULT` expressions spécifiées dans la définition de la table. +- Zéros et chaînes vides, si `DEFAULT` les expressions ne sont pas définies. + +Si [strict\_insert\_defaults=1](../operations/settings/settings.md), les colonnes qui n'ont pas `DEFAULT` défini doit être répertorié dans la requête. + +Les données peuvent être transmises à L'INSERT dans n'importe quel [format](../interfaces/formats.md#formats) soutenu par ClickHouse. Le format doit être spécifié explicitement dans la requête: + +``` sql +INSERT INTO [db.]table [(c1, c2, c3)] FORMAT format_name data_set +``` + +For example, the following query format is identical to the basic version of INSERT … VALUES: + +``` sql +INSERT INTO [db.]table [(c1, c2, c3)] FORMAT Values (v11, v12, v13), (v21, v22, v23), ... +``` + +ClickHouse supprime tous les espaces et un saut de ligne (s'il y en a un) avant les données. Lors de la formation d'une requête, nous recommandons de placer les données sur une nouvelle ligne après les opérateurs de requête (ceci est important si les données commencent par des espaces). + +Exemple: + +``` sql +INSERT INTO t FORMAT TabSeparated +11 Hello, world! +22 Qwerty +``` + +Vous pouvez insérer des données séparément de la requête à l'aide du client de ligne de commande ou de L'interface HTTP. Pour plus d'informations, consultez la section “[Interface](../interfaces/index.md#interfaces)”. + +### Contraintes {#constraints} + +Si la table a [contraintes](create.md#constraints), their expressions will be checked for each row of inserted data. If any of those constraints is not satisfied — server will raise an exception containing constraint name and expression, the query will be stopped. + +### Insertion des résultats de `SELECT` {#insert_query_insert-select} + +``` sql +INSERT INTO [db.]table [(c1, c2, c3)] SELECT ... +``` + +Les colonnes sont mappées en fonction de leur position dans la clause SELECT. Cependant, leurs noms dans L'expression SELECT et la table pour INSERT peuvent différer. Si nécessaire, la coulée de type est effectuée. + +Aucun des formats de données à l'exception des Valeurs permettent de définir des valeurs d'expressions telles que `now()`, `1 + 2` et ainsi de suite. Le format des valeurs permet une utilisation limitée des expressions, mais ce n'est pas recommandé, car dans ce cas, un code inefficace est utilisé pour leur exécution. + +Les autres requêtes de modification des parties de données ne sont pas prises en charge: `UPDATE`, `DELETE`, `REPLACE`, `MERGE`, `UPSERT`, `INSERT UPDATE`. +Cependant, vous pouvez supprimer les anciennes données en utilisant `ALTER TABLE ... DROP PARTITION`. + +`FORMAT` la clause doit être spécifié à la fin de la requête si `SELECT` la clause contient la fonction de table [entrée()](table_functions/input.md). + +### Considérations De Performance {#performance-considerations} + +`INSERT` trie les données d'entrée par la clé primaire et les divise en partitions par une clé de partition. Si vous insérez des données dans plusieurs partitions à la fois, cela peut réduire considérablement les performances de l' `INSERT` requête. Pour éviter cela: + +- Ajoutez des données en lots assez importants, tels que 100 000 lignes à la fois. +- Groupez les données par une clé de partition avant de les télécharger sur ClickHouse. + +Les performances ne diminueront pas si: + +- Les données sont ajoutées en temps réel. +- Vous téléchargez des données qui sont généralement triées par heure. + +[Article Original](https://clickhouse.tech/docs/en/query_language/insert_into/) diff --git a/docs/fr/query_language/misc.md b/docs/fr/query_language/misc.md new file mode 100644 index 00000000000..3ca724f57d3 --- /dev/null +++ b/docs/fr/query_language/misc.md @@ -0,0 +1,249 @@ +--- +machine_translated: true +--- + +# Diverses Requêtes {#miscellaneous-queries} + +## ATTACH {#attach} + +Cette requête est exactement la même que `CREATE`, mais + +- Au lieu de la parole `CREATE` il utilise le mot `ATTACH`. +- La requête ne crée pas de données sur le disque, mais suppose que les données sont déjà aux endroits appropriés, et ajoute simplement des informations sur la table au serveur. + Après avoir exécuté une requête ATTACH, le serveur connaîtra l'existence de la table. + +Si la table a été précédemment détachée (`DETACH`), ce qui signifie que sa structure est connue, vous pouvez utiliser un raccourci sans définir la structure. + +``` sql +ATTACH TABLE [IF NOT EXISTS] [db.]name [ON CLUSTER cluster] +``` + +Cette requête est utilisée lors du démarrage du serveur. Le serveur stocke les métadonnées de la table sous forme de fichiers avec `ATTACH` requêtes, qu'il exécute simplement au lancement (à l'exception des tables système, qui sont explicitement créées sur le serveur). + +## CHECK TABLE {#check-table} + +Vérifie si les données de la table sont corrompues. + +``` sql +CHECK TABLE [db.]name +``` + +Le `CHECK TABLE` requête compare réelle des tailles de fichier avec les valeurs attendues qui sont stockés sur le serveur. Si le fichier tailles ne correspondent pas aux valeurs stockées, cela signifie que les données sont endommagées. Cela peut être causé, par exemple, par un plantage du système lors de l'exécution de la requête. + +La réponse de la requête contient `result` colonne avec une seule ligne. La ligne a une valeur de +[Booléen](../data_types/boolean.md) type: + +- 0 - les données de la table sont corrompues. +- 1 - les données maintiennent l'intégrité. + +Le `CHECK TABLE` query prend en charge les moteurs de table suivants: + +- [Journal](../operations/table_engines/log.md) +- [TinyLog](../operations/table_engines/tinylog.md) +- [StripeLog](../operations/table_engines/stripelog.md) +- [Famille MergeTree](../operations/table_engines/mergetree.md) + +Effectué sur les tables avec un autre moteur de table provoque une exception. + +Les moteurs de la `*Log` la famille ne fournit pas de récupération automatique des données en cas d'échec. L'utilisation de la `CHECK TABLE` requête pour suivre la perte de données en temps opportun. + +Pour `MergeTree` moteurs de la famille, le `CHECK TABLE` query affiche un État de vérification pour chaque partie de données individuelle d'une table sur le serveur local. + +**Si les données sont corrompues** + +Si la table est corrompue, vous pouvez copier les données non corrompues dans une autre table. Pour ce faire: + +1. Créez une nouvelle table avec la même structure que la table endommagée. Pour ce faire exécutez la requête `CREATE TABLE AS `. +2. Définir le [max\_threads](../operations/settings/settings.md#settings-max_threads) la valeur 1 pour traiter la requête suivante dans un seul thread. Pour ce faire, exécutez la requête `SET max_threads = 1`. +3. Exécuter la requête `INSERT INTO SELECT * FROM `. Cette demande copie les données non corrompues de la table endommagée vers une autre table. Seules les données avant la partie corrompue seront copiées. +4. Redémarrez l' `clickhouse-client` pour réinitialiser l' `max_threads` valeur. + +## DESCRIBE TABLE {#misc-describe-table} + +``` sql +DESC|DESCRIBE TABLE [db.]table [INTO OUTFILE filename] [FORMAT format] +``` + +Renvoie ce qui suit `String` les colonnes de type: + +- `name` — Column name. +- `type`— Column type. +- `default_type` — Clause that is used in [expression par défaut](create.md#create-default-values) (`DEFAULT`, `MATERIALIZED` ou `ALIAS`). Column contient une chaîne vide, si l'expression par défaut n'est pas spécifiée. +- `default_expression` — Value specified in the `DEFAULT` clause. +- `comment_expression` — Comment text. + +Les structures de données imbriquées sont sorties dans “expanded” format. Chaque colonne est affichée séparément, avec le nom après un point. + +## DETACH {#detach} + +Supprime les informations sur le ‘name’ table du serveur. Le serveur cesse de connaître l'existence de la table. + +``` sql +DETACH TABLE [IF EXISTS] [db.]name [ON CLUSTER cluster] +``` + +Cela ne supprime pas les données ou les métadonnées de la table. Lors du prochain lancement du serveur, le serveur Lira les métadonnées et découvrira à nouveau la table. +De même, un “detached” tableau peut être re-attaché en utilisant le `ATTACH` requête (à l'exception des tables système, qui n'ont pas de stocker les métadonnées pour eux). + +Il n'y a pas de `DETACH DATABASE` requête. + +## DROP {#drop} + +Cette requête a deux types: `DROP DATABASE` et `DROP TABLE`. + +``` sql +DROP DATABASE [IF EXISTS] db [ON CLUSTER cluster] +``` + +Supprime toutes les tables à l'intérieur de la ‘db’ la base de données, puis supprime le ‘db’ la base de données elle-même. +Si `IF EXISTS` est spécifié, il ne renvoie pas d'erreur si la base de données n'existe pas. + +``` sql +DROP [TEMPORARY] TABLE [IF EXISTS] [db.]name [ON CLUSTER cluster] +``` + +Supprime la table. +Si `IF EXISTS` est spécifié, il ne renvoie pas d'erreur si la table n'existe pas ou si la base de données n'existe pas. + + DROP DICTIONARY [IF EXISTS] [db.]name + +Delets le dictionnaire. +Si `IF EXISTS` est spécifié, il ne renvoie pas d'erreur si la table n'existe pas ou si la base de données n'existe pas. + +## EXISTS {#exists} + +``` sql +EXISTS [TEMPORARY] [TABLE|DICTIONARY] [db.]name [INTO OUTFILE filename] [FORMAT format] +``` + +Renvoie un seul `UInt8`- type colonne, qui contient la valeur unique `0` si la table ou base de données n'existe pas, ou `1` si la table existe dans la base de données spécifiée. + +## KILL QUERY {#kill-query} + +``` sql +KILL QUERY [ON CLUSTER cluster] + WHERE + [SYNC|ASYNC|TEST] + [FORMAT format] +``` + +Tente de mettre fin de force aux requêtes en cours d'exécution. +Les requêtes à terminer sont sélectionnées dans le système.processus en utilisant les critères définis dans le `WHERE` la clause de la `KILL` requête. + +Exemple: + +``` sql +-- Forcibly terminates all queries with the specified query_id: +KILL QUERY WHERE query_id='2-857d-4a57-9ee0-327da5d60a90' + +-- Synchronously terminates all queries run by 'username': +KILL QUERY WHERE user='username' SYNC +``` + +Les utilisateurs en lecture seule peuvent uniquement arrêter leurs propres requêtes. + +Par défaut, la version asynchrone des requêtes est utilisé (`ASYNC`), qui n'attend pas la confirmation que les requêtes se sont arrêtées. + +La version synchrone (`SYNC`) attend que toutes les requêtes d'arrêter et affiche des informations sur chaque processus s'arrête. +La réponse contient l' `kill_status` la colonne, qui peut prendre les valeurs suivantes: + +1. ‘finished’ – The query was terminated successfully. +2. ‘waiting’ – Waiting for the query to end after sending it a signal to terminate. +3. The other values ​​explain why the query can't be stopped. + +Une requête de test (`TEST`) vérifie uniquement les droits de l'utilisateur et affiche une liste de requêtes à arrêter. + +## KILL MUTATION {#kill-mutation} + +``` sql +KILL MUTATION [ON CLUSTER cluster] + WHERE + [TEST] + [FORMAT format] +``` + +Essaie d'annuler et supprimer [mutation](alter.md#alter-mutations) actuellement en cours d'exécution. Les Mutations à annuler sont sélectionnées parmi [`system.mutations`](../operations/system_tables.md#system_tables-mutations) tableau à l'aide du filtre spécifié par le `WHERE` la clause de la `KILL` requête. + +Une requête de test (`TEST`) vérifie uniquement les droits de l'utilisateur et affiche une liste de requêtes à arrêter. + +Exemple: + +``` sql +-- Cancel and remove all mutations of the single table: +KILL MUTATION WHERE database = 'default' AND table = 'table' + +-- Cancel the specific mutation: +KILL MUTATION WHERE database = 'default' AND table = 'table' AND mutation_id = 'mutation_3.txt' +``` + +The query is useful when a mutation is stuck and cannot finish (e.g. if some function in the mutation query throws an exception when applied to the data contained in the table). + +Les modifications déjà apportées par la mutation ne sont pas annulées. + +## OPTIMIZE {#misc_operations-optimize} + +``` sql +OPTIMIZE TABLE [db.]name [ON CLUSTER cluster] [PARTITION partition | PARTITION ID 'partition_id'] [FINAL] [DEDUPLICATE] +``` + +Cette requête tente d'initialiser une fusion non programmée de parties de données pour les tables avec un moteur de [MergeTree](../operations/table_engines/mergetree.md) famille. + +Le `OPTMIZE` la requête est également prise en charge pour [MaterializedView](../operations/table_engines/materializedview.md) et la [Tampon](../operations/table_engines/buffer.md) moteur. Les autres moteurs de table ne sont pas pris en charge. + +Lorsque `OPTIMIZE` est utilisé avec le [ReplicatedMergeTree](../operations/table_engines/replication.md) famille de moteurs de table, ClickHouse crée une tâche pour la fusion et attend l'exécution sur tous les nœuds (si le `replication_alter_partitions_sync` paramètre est activé). + +- Si `OPTIMIZE` n'effectue pas de fusion pour une raison quelconque, il ne notifie pas le client. Pour activer les notifications, utilisez [optimize\_throw\_if\_noop](../operations/settings/settings.md#setting-optimize_throw_if_noop) paramètre. +- Si vous spécifiez un `PARTITION`, seule la partition spécifiée est optimisé. [Comment définir l'expression de la partition](alter.md#alter-how-to-specify-part-expr). +- Si vous spécifiez `FINAL`, l'optimisation est effectuée, même lorsque toutes les données sont déjà dans une partie. +- Si vous spécifiez `DEDUPLICATE`, alors des lignes complètement identiques seront dédupliquées (toutes les colonnes sont comparées), cela n'a de sens que pour le moteur MergeTree. + +!!! warning "Avertissement" + `OPTIMIZE` ne peut pas réparer le “Too many parts” erreur. + +## RENAME {#misc_operations-rename} + +Renomme une ou plusieurs tables. + +``` sql +RENAME TABLE [db11.]name11 TO [db12.]name12, [db21.]name21 TO [db22.]name22, ... [ON CLUSTER cluster] +``` + +Toutes les tables sont renommées sous verrouillage global. Renommer des tables est une opération légère. Si vous avez indiqué une autre base de données après TO, la table sera déplacée vers cette base de données. Cependant, les répertoires contenant des bases de données doivent résider dans le même système de fichiers (sinon, une erreur est renvoyée). + +## SET {#query-set} + +``` sql +SET param = value +``` + +Assigner `value` à l' `param` [paramètre](../operations/settings/index.md) pour la session en cours. Vous ne pouvez pas modifier [les paramètres du serveur](../operations/server_settings/index.md) de cette façon. + +Vous pouvez également définir toutes les valeurs de certains paramètres de profil dans une seule requête. + +``` sql +SET profile = 'profile-name-from-the-settings-file' +``` + +Pour plus d'informations, voir [Paramètre](../operations/settings/settings.md). + +## TRUNCATE {#truncate} + +``` sql +TRUNCATE TABLE [IF EXISTS] [db.]name [ON CLUSTER cluster] +``` + +Supprime toutes les données d'une table. Lorsque la clause `IF EXISTS` est omis, la requête renvoie une erreur si la table n'existe pas. + +Le `TRUNCATE` la requête n'est pas prise en charge pour [Vue](../operations/table_engines/view.md), [Fichier](../operations/table_engines/file.md), [URL](../operations/table_engines/url.md) et [NULL](../operations/table_engines/null.md) table des moteurs. + +## USE {#use} + +``` sql +USE db +``` + +Vous permet de définir la base de données actuelle pour la session. +La base de données actuelle est utilisée pour rechercher des tables si la base de données n'est pas explicitement définie dans la requête avec un point avant le nom de la table. +Cette requête ne peut pas être faite lors de l'utilisation du protocole HTTP, car il n'y a pas de concept de session. + +[Article Original](https://clickhouse.tech/docs/en/query_language/misc/) diff --git a/docs/fr/query_language/operators.md b/docs/fr/query_language/operators.md new file mode 100644 index 00000000000..76477cfae4a --- /dev/null +++ b/docs/fr/query_language/operators.md @@ -0,0 +1,275 @@ +--- +machine_translated: true +--- + +# Opérateur {#operators} + +Tous les opérateurs sont transformés en leurs fonctions correspondantes à l'étape d'analyse des requêtes en fonction de leur priorité et de leur associativité. +Les groupes d'opérateurs sont listés par ordre de priorité (plus il est élevé dans la liste, plus tôt l'opérateur est connecté à ses arguments). + +## Des Opérateurs D'Accès {#access-operators} + +`a[N]` – Access to an element of an array. The `arrayElement(a, N)` fonction. + +`a.N` – Access to a tuple element. The `tupleElement(a, N)` fonction. + +## Opérateur De Négation Numérique {#numeric-negation-operator} + +`-a` – The `negate (a)` fonction. + +## Opérateurs de Multiplication et de Division {#multiplication-and-division-operators} + +`a * b` – The `multiply (a, b)` fonction. + +`a / b` – The `divide(a, b)` fonction. + +`a % b` – The `modulo(a, b)` fonction. + +## Opérateurs d'Addition et de soustraction {#addition-and-subtraction-operators} + +`a + b` – The `plus(a, b)` fonction. + +`a - b` – The `minus(a, b)` fonction. + +## Opérateurs De Comparaison {#comparison-operators} + +`a = b` – The `equals(a, b)` fonction. + +`a == b` – The `equals(a, b)` fonction. + +`a != b` – The `notEquals(a, b)` fonction. + +`a <> b` – The `notEquals(a, b)` fonction. + +`a <= b` – The `lessOrEquals(a, b)` fonction. + +`a >= b` – The `greaterOrEquals(a, b)` fonction. + +`a < b` – The `less(a, b)` fonction. + +`a > b` – The `greater(a, b)` fonction. + +`a LIKE s` – The `like(a, b)` fonction. + +`a NOT LIKE s` – The `notLike(a, b)` fonction. + +`a BETWEEN b AND c` – The same as `a >= b AND a <= c`. + +`a NOT BETWEEN b AND c` – The same as `a < b OR a > c`. + +## Opérateurs pour travailler avec des ensembles de données {#operators-for-working-with-data-sets} + +*Voir [Dans les opérateurs](select.md#select-in-operators).* + +`a IN ...` – The `in(a, b)` fonction. + +`a NOT IN ...` – The `notIn(a, b)` fonction. + +`a GLOBAL IN ...` – The `globalIn(a, b)` fonction. + +`a GLOBAL NOT IN ...` – The `globalNotIn(a, b)` fonction. + +## Opérateurs pour travailler avec des Dates et des heures {#operators-datetime} + +### EXTRACT {#operator-extract} + +``` sql +EXTRACT(part FROM date); +``` + +Extrait une partie d'une date donnée. Par exemple, vous pouvez récupérer un mois à partir d'une date donnée, ou d'une seconde à partir d'un moment. + +Le `part` paramètre spécifie la partie de la date à récupérer. Les valeurs suivantes sont disponibles: + +- `DAY` — The day of the month. Possible values: 1–31. +- `MONTH` — The number of a month. Possible values: 1–12. +- `YEAR` — The year. +- `SECOND` — The second. Possible values: 0–59. +- `MINUTE` — The minute. Possible values: 0–59. +- `HOUR` — The hour. Possible values: 0–23. + +Le `part` le paramètre est insensible à la casse. + +Le `date` paramètre spécifie la date ou l'heure à traiter. Soit [Date](../data_types/date.md) ou [DateTime](../data_types/datetime.md) le type est pris en charge. + +Exemple: + +``` sql +SELECT EXTRACT(DAY FROM toDate('2017-06-15')); +SELECT EXTRACT(MONTH FROM toDate('2017-06-15')); +SELECT EXTRACT(YEAR FROM toDate('2017-06-15')); +``` + +Dans l'exemple suivant, nous créons un tableau et de les insérer dans une valeur avec le `DateTime` type. + +``` sql +CREATE TABLE test.Orders +( + OrderId UInt64, + OrderName String, + OrderDate DateTime +) +ENGINE = Log; +``` + +``` sql +INSERT INTO test.Orders VALUES (1, 'Jarlsberg Cheese', toDateTime('2008-10-11 13:23:44')); +``` + +``` sql +SELECT + toYear(OrderDate) AS OrderYear, + toMonth(OrderDate) AS OrderMonth, + toDayOfMonth(OrderDate) AS OrderDay, + toHour(OrderDate) AS OrderHour, + toMinute(OrderDate) AS OrderMinute, + toSecond(OrderDate) AS OrderSecond +FROM test.Orders; +``` + +``` text +┌─OrderYear─┬─OrderMonth─┬─OrderDay─┬─OrderHour─┬─OrderMinute─┬─OrderSecond─┐ +│ 2008 │ 10 │ 11 │ 13 │ 23 │ 44 │ +└───────────┴────────────┴──────────┴───────────┴─────────────┴─────────────┘ +``` + +Vous pouvez voir plus d'exemples de [test](https://github.com/ClickHouse/ClickHouse/blob/master/dbms/tests/queries/0_stateless/00619_extract.sql). + +### INTERVAL {#operator-interval} + +Crée un [Intervalle](../data_types/special_data_types/interval.md)- valeur de type qui doit être utilisée dans les opérations arithmétiques avec [Date](../data_types/date.md) et [DateTime](../data_types/datetime.md)-type de valeurs. + +Types d'intervalles: +- `SECOND` +- `MINUTE` +- `HOUR` +- `DAY` +- `WEEK` +- `MONTH` +- `QUARTER` +- `YEAR` + +!!! warning "Avertissement" + Les intervalles avec différents types ne peuvent pas être combinés. Vous ne pouvez pas utiliser des expressions comme `INTERVAL 4 DAY 1 HOUR`. Exprimer des intervalles en unités plus petites ou égales à la plus petite unité de l'intervalle, par exemple `INTERVAL 25 HOUR`. Vous pouvez utiliser des opérations conséquentes comme dans l'exemple ci-dessous. + +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 │ +└─────────────────────┴────────────────────────────────────────────────────────┘ +``` + +**Voir Aussi** + +- [Intervalle](../data_types/special_data_types/interval.md) type de données +- [toInterval](functions/type_conversion_functions.md#function-tointerval) type fonctions de conversion + +## Opérateur De Négation Logique {#logical-negation-operator} + +`NOT a` – The `not(a)` fonction. + +## Logique ET de l'Opérateur {#logical-and-operator} + +`a AND b` – The`and(a, b)` fonction. + +## Logique ou opérateur {#logical-or-operator} + +`a OR b` – The `or(a, b)` fonction. + +## Opérateur Conditionnel {#conditional-operator} + +`a ? b : c` – The `if(a, b, c)` fonction. + +Note: + +L'opérateur conditionnel calcule les valeurs de b et c, puis vérifie si la condition a est remplie, puis renvoie la valeur correspondante. Si `b` ou `C` est un [arrayJoin()](functions/array_join.md#functions_arrayjoin) fonction, chaque ligne sera répliquée indépendamment de la “a” condition. + +## Expression Conditionnelle {#operator_case} + +``` sql +CASE [x] + WHEN a THEN b + [WHEN ... THEN ...] + [ELSE c] +END +``` + +Si `x` est spécifié, alors `transform(x, [a, ...], [b, ...], c)` function is used. Otherwise – `multiIf(a, b, ..., c)`. + +Si il n'y a pas de `ELSE c` dans l'expression, la valeur par défaut est `NULL`. + +Le `transform` la fonction ne fonctionne pas avec `NULL`. + +## Opérateur De Concaténation {#concatenation-operator} + +`s1 || s2` – The `concat(s1, s2) function.` + +## Opérateur De Création Lambda {#lambda-creation-operator} + +`x -> expr` – The `lambda(x, expr) function.` + +Les opérateurs suivants n'ont pas de priorité, puisqu'ils sont des parenthèses: + +## Opérateur De Création De Tableau {#array-creation-operator} + +`[x1, ...]` – The `array(x1, ...) function.` + +## Opérateur De Création De Tuple {#tuple-creation-operator} + +`(x1, x2, ...)` – The `tuple(x2, x2, ...) function.` + +## Associativité {#associativity} + +Tous les opérateurs binaires ont associativité gauche. Exemple, `1 + 2 + 3` est transformé à `plus(plus(1, 2), 3)`. +Parfois, cela ne fonctionne pas de la façon que vous attendez. Exemple, `SELECT 4 > 2 > 3` résultat sera 0. + +Pour l'efficacité, le `and` et `or` les fonctions acceptent n'importe quel nombre d'arguments. Les chaînes de `AND` et `OR` les opérateurs sont transformés en un seul appel de ces fonctions. + +## La vérification de `NULL` {#checking-for-null} + +Clickhouse soutient le `IS NULL` et `IS NOT NULL` opérateur. + +### IS NULL {#operator-is-null} + +- Pour [Nullable](../data_types/nullable.md) type de valeurs, l' `IS NULL` opérateur retourne: + - `1` si la valeur est `NULL`. + - `0` autrement. +- Pour les autres valeurs, la `IS NULL` l'opérateur renvoie toujours `0`. + + + +``` sql +SELECT x+100 FROM t_null WHERE y IS NULL +``` + +``` text +┌─plus(x, 100)─┐ +│ 101 │ +└──────────────┘ +``` + +### IS NOT NULL {#is-not-null} + +- Pour [Nullable](../data_types/nullable.md) type de valeurs, l' `IS NOT NULL` opérateur retourne: + - `0` si la valeur est `NULL`. + - `1` autrement. +- Pour les autres valeurs, la `IS NOT NULL` l'opérateur renvoie toujours `1`. + + + +``` sql +SELECT * FROM t_null WHERE y IS NOT NULL +``` + +``` text +┌─x─┬─y─┐ +│ 2 │ 3 │ +└───┴───┘ +``` + +[Article Original](https://clickhouse.tech/docs/en/query_language/operators/) diff --git a/docs/fr/query_language/select.md b/docs/fr/query_language/select.md new file mode 100644 index 00000000000..c5955b5f45d --- /dev/null +++ b/docs/fr/query_language/select.md @@ -0,0 +1,1379 @@ +--- +machine_translated: true +--- + +# Sélectionnez la syntaxe des requêtes {#select-queries-syntax} + +`SELECT` effectue la récupération des données. + +``` sql +[WITH expr_list|(subquery)] +SELECT [DISTINCT] expr_list +[FROM [db.]table | (subquery) | table_function] [FINAL] +[SAMPLE sample_coeff] +[ARRAY JOIN ...] +[GLOBAL] [ANY|ALL] [INNER|LEFT|RIGHT|FULL|CROSS] [OUTER] JOIN (subquery)|table USING columns_list +[PREWHERE expr] +[WHERE expr] +[GROUP BY expr_list] [WITH TOTALS] +[HAVING expr] +[ORDER BY expr_list] +[LIMIT [offset_value, ]n BY columns] +[LIMIT [n, ]m] +[UNION ALL ...] +[INTO OUTFILE filename] +[FORMAT format] +``` + +Toutes les clauses sont facultatives, à l'exception de la liste d'expressions requise immédiatement après SELECT. +Les clauses ci-dessous sont décrites dans presque le même ordre que dans l'exécution de la requête convoyeur. + +Si la requête omet le `DISTINCT`, `GROUP BY` et `ORDER BY` les clauses et les `IN` et `JOIN` sous-requêtes, la requête sera complètement traitée en flux, en utilisant O (1) quantité de RAM. +Sinon, la requête peut consommer beaucoup de RAM si les restrictions appropriées ne sont pas spécifiées: `max_memory_usage`, `max_rows_to_group_by`, `max_rows_to_sort`, `max_rows_in_distinct`, `max_bytes_in_distinct`, `max_rows_in_set`, `max_bytes_in_set`, `max_rows_in_join`, `max_bytes_in_join`, `max_bytes_before_external_sort`, `max_bytes_before_external_group_by`. Pour plus d'informations, consultez la section “Settings”. Il est possible d'utiliser le tri externe (sauvegarde des tables temporaires sur un disque) et l'agrégation externe. `The system does not have "merge join"`. + +### AVEC la Clause {#with-clause} + +Cette section prend en charge les Expressions de Table courantes ([CTE](https://en.wikipedia.org/wiki/Hierarchical_and_recursive_queries_in_SQL)), avec quelques limitations: +1. Les requêtes récursives ne sont pas prises en charge +2. Lorsque la sous-requête est utilisée à l'intérieur avec section, son résultat doit être scalaire avec exactement une ligne +3. Les résultats d'Expression ne sont pas disponibles dans les sous requêtes +Les résultats des expressions de clause WITH peuvent être utilisés dans la clause SELECT. + +Exemple 1: Utilisation d'une expression constante comme “variable” + +``` sql +WITH '2019-08-01 15:23:00' as ts_upper_bound +SELECT * +FROM hits +WHERE + EventDate = toDate(ts_upper_bound) AND + EventTime <= ts_upper_bound +``` + +Exemple 2: Expulsion de la somme(octets) résultat de l'expression de clause SELECT de la liste de colonnes + +``` sql +WITH sum(bytes) as s +SELECT + formatReadableSize(s), + table +FROM system.parts +GROUP BY table +ORDER BY s +``` + +Exemple 3: Utilisation des résultats de la sous-requête scalaire + +``` sql +/* this example would return TOP 10 of most huge tables */ +WITH + ( + SELECT sum(bytes) + FROM system.parts + WHERE active + ) AS total_disk_usage +SELECT + (sum(bytes) / total_disk_usage) * 100 AS table_disk_usage, + table +FROM system.parts +GROUP BY table +ORDER BY table_disk_usage DESC +LIMIT 10 +``` + +Exemple 4: réutilisation de l'expression dans la sous-requête +Comme solution de contournement pour la limitation actuelle de l'utilisation de l'expression dans les sous-requêtes, Vous pouvez la dupliquer. + +``` sql +WITH ['hello'] AS hello +SELECT + hello, + * +FROM +( + WITH ['hello'] AS hello + SELECT hello +) +``` + +``` text +┌─hello─────┬─hello─────┐ +│ ['hello'] │ ['hello'] │ +└───────────┴───────────┘ +``` + +### De la Clause {#select-from} + +Si la clause FROM est omise, les données seront lues à partir `system.one` table. +Le `system.one` table contient exactement une ligne (cette table remplit le même but que la table double trouvée dans d'autres SGBD). + +Le `FROM` clause spécifie la source à partir de laquelle lire les données: + +- Table +- Sous-requête +- [Fonction de Table](table_functions/index.md) + +`ARRAY JOIN` et le régulier `JOIN` peuvent également être inclus (voir ci-dessous). + +Au lieu d'une table, l' `SELECT` sous-requête peut être spécifiée entre parenthèses. +Contrairement à SQL standard, un synonyme n'a pas besoin d'être spécifié après une sous-requête. + +Pour exécuter une requête, toutes les colonnes mentionnées dans la requête sont extraites de la table appropriée. Toutes les colonnes non nécessaires pour la requête externe sont rejetées des sous-requêtes. +Si une requête ne répertorie aucune colonne (par exemple, `SELECT count() FROM t`), une colonne est extraite de la table de toute façon (la plus petite est préférée), afin de calculer le nombre de lignes. + +#### Modificateur FINAL {#select-from-final} + +Applicable lors de la sélection de données à partir de tables [MergeTree](../operations/table_engines/mergetree.md)-famille de moteurs autres que `GraphiteMergeTree`. Lorsque `FINAL` est spécifié, ClickHouse fusionne complètement les données avant de renvoyer le résultat et effectue ainsi toutes les transformations de données qui se produisent lors des fusions pour le moteur de table donné. + +Également pris en charge pour: +- [Répliqué](../operations/table_engines/replication.md) les versions de `MergeTree` moteur. +- [Vue](../operations/table_engines/view.md), [Tampon](../operations/table_engines/buffer.md), [Distribué](../operations/table_engines/distributed.md), et [MaterializedView](../operations/table_engines/materializedview.md) moteurs qui fonctionnent sur d'autres moteurs, à condition qu'ils aient été créés sur `MergeTree`-tables de moteur. + +Requêtes qui utilisent `FINAL` sont exécutés pas aussi vite que les requêtes similaires qui ne le font pas, car: + +- La requête est exécutée dans un seul thread et les données sont fusionnées lors de l'exécution de la requête. +- Les requêtes avec `FINAL` lire les colonnes de clé primaire en plus des colonnes spécifiées dans la requête. + +Dans la plupart des cas, évitez d'utiliser `FINAL`. + +### Exemple de Clause {#select-sample-clause} + +Le `SAMPLE` la clause permet un traitement de requête approximatif. + +Lorsque l'échantillonnage de données est activé, la requête n'est pas effectuée sur toutes les données, mais uniquement sur une certaine fraction de données (échantillon). Par exemple, si vous avez besoin de calculer des statistiques pour toutes les visites, il suffit d'exécuter la requête sur le 1/10 de la fraction de toutes les visites, puis multiplier le résultat par 10. + +Le traitement approximatif des requêtes peut être utile dans les cas suivants: + +- Lorsque vous avez des exigences de synchronisation strictes (comme \<100ms), mais que vous ne pouvez pas justifier le coût des ressources matérielles supplémentaires pour y répondre. +- Lorsque vos données brutes ne sont pas précises, l'approximation ne dégrade pas sensiblement la qualité. +- Les exigences commerciales ciblent des résultats approximatifs (pour la rentabilité, ou afin de commercialiser des résultats exacts aux utilisateurs premium). + +!!! note "Note" + Vous ne pouvez utiliser l'échantillonnage qu'avec les tables [MergeTree](../operations/table_engines/mergetree.md) famille, et seulement si l'expression d'échantillonnage a été spécifiée lors de la création de la table (voir [Moteur MergeTree](../operations/table_engines/mergetree.md#table_engine-mergetree-creating-a-table)). + +Les caractéristiques de l'échantillonnage des données sont énumérées ci-dessous: + +- L'échantillonnage de données est un mécanisme déterministe. Le résultat de la même `SELECT .. SAMPLE` la requête est toujours le même. +- L'échantillonnage fonctionne de manière cohérente pour différentes tables. Pour les tables avec une seule clé d'échantillonnage, un échantillon avec le même coefficient sélectionne toujours le même sous-ensemble de données possibles. Par exemple, un exemple d'ID utilisateur prend des lignes avec le même sous-ensemble de tous les ID utilisateur possibles de différentes tables. Cela signifie que vous pouvez utiliser l'exemple dans les sous-requêtes dans la [IN](#select-in-operators) clause. En outre, vous pouvez joindre des échantillons en utilisant le [JOIN](#select-join) clause. +- L'échantillonnage permet de lire moins de données à partir d'un disque. Notez que vous devez spécifier l'échantillonnage clé correctement. Pour plus d'informations, voir [Création d'une Table MergeTree](../operations/table_engines/mergetree.md#table_engine-mergetree-creating-a-table). + +Pour l' `SAMPLE` clause la syntaxe suivante est prise en charge: + +| SAMPLE Clause Syntax | Description | +|----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `SAMPLE k` | Ici `k` est le nombre de 0 à 1.
La requête est exécutée sur `k` fraction des données. Exemple, `SAMPLE 0.1` exécute la requête sur 10% des données. [Lire plus](#select-sample-k) | +| `SAMPLE n` | Ici `n` est un entier suffisamment grand.
La requête est exécutée sur un échantillon d'au moins `n` lignes (mais pas significativement plus que cela). Exemple, `SAMPLE 10000000` exécute la requête sur un minimum de 10 000 000 lignes. [Lire plus](#select-sample-n) | +| `SAMPLE k OFFSET m` | Ici `k` et `m` sont les nombres de 0 à 1.
La requête est exécutée sur un échantillon de `k` fraction des données. Les données utilisées pour l'échantillon est compensée par `m` fraction. [Lire plus](#select-sample-offset) | + +#### L'ÉCHANTILLON k {#select-sample-k} + +Ici `k` est le nombre de 0 à 1 (les notations fractionnaires et décimales sont prises en charge). Exemple, `SAMPLE 1/2` ou `SAMPLE 0.5`. + +Dans un `SAMPLE k` clause, l'échantillon est prélevé à partir de la `k` fraction des données. L'exemple est illustré ci-dessous: + +``` sql +SELECT + Title, + count() * 10 AS PageViews +FROM hits_distributed +SAMPLE 0.1 +WHERE + CounterID = 34 +GROUP BY Title +ORDER BY PageViews DESC LIMIT 1000 +``` + +Dans cet exemple, la requête est exécutée sur un échantillon de 0,1 (10%) de données. Les valeurs des fonctions d'agrégat ne sont pas corrigées automatiquement, donc pour obtenir un résultat approximatif, la valeur `count()` est multiplié manuellement par 10. + +#### Échantillon n {#select-sample-n} + +Ici `n` est un entier suffisamment grand. Exemple, `SAMPLE 10000000`. + +Dans ce cas, la requête est exécutée sur un échantillon d'au moins `n` lignes (mais pas significativement plus que cela). Exemple, `SAMPLE 10000000` exécute la requête sur un minimum de 10 000 000 lignes. + +Puisque l'unité minimale pour la lecture des données est un granule (sa taille est définie par le `index_granularity` de réglage), il est logique de définir un échantillon beaucoup plus grand que la taille du granule. + +Lors de l'utilisation de la `SAMPLE n` clause, vous ne savez pas quel pourcentage relatif de données a été traité. Donc, vous ne connaissez pas le coefficient par lequel les fonctions agrégées doivent être multipliées. L'utilisation de la `_sample_factor` colonne virtuelle pour obtenir le résultat approximatif. + +Le `_sample_factor` colonne contient des coefficients relatifs qui sont calculés dynamiquement. Cette colonne est créée automatiquement lorsque vous [créer](../operations/table_engines/mergetree.md#table_engine-mergetree-creating-a-table) une table avec la clé d'échantillonnage spécifiée. Les exemples d'utilisation de la `_sample_factor` colonne sont indiqués ci-dessous. + +Considérons la table `visits` qui contient des statistiques sur les visites de site. Le premier exemple montre comment calculer le nombre de pages vues: + +``` sql +SELECT sum(PageViews * _sample_factor) +FROM visits +SAMPLE 10000000 +``` + +L'exemple suivant montre comment calculer le nombre total de visites: + +``` sql +SELECT sum(_sample_factor) +FROM visits +SAMPLE 10000000 +``` + +L'exemple ci-dessous montre comment calculer la durée moyenne de la session. Notez que vous n'avez pas besoin d'utiliser le coefficient relatif pour calculer les valeurs moyennes. + +``` sql +SELECT avg(Duration) +FROM visits +SAMPLE 10000000 +``` + +#### Échantillon K décalage m {#select-sample-offset} + +Ici `k` et `m` sont des nombres de 0 à 1. Des exemples sont présentés ci-dessous. + +**Exemple 1** + +``` sql +SAMPLE 1/10 +``` + +Dans cet exemple, l'échantillon représente 1 / 10e de toutes les données: + +`[++------------------]` + +**Exemple 2** + +``` sql +SAMPLE 1/10 OFFSET 1/2 +``` + +Ici, un échantillon de 10% est prélevé à partir de la seconde moitié des données. + +`[----------++--------]` + +### Clause de jointure de tableau {#select-array-join-clause} + +Permet l'exécution de `JOIN` avec un tableau ou une structure de données imbriquée. L'intention est similaire à la [arrayJoin](functions/array_join.md#functions_arrayjoin) la fonction, mais sa fonctionnalité est plus large. + +``` sql +SELECT +FROM +[LEFT] ARRAY JOIN +[WHERE|PREWHERE ] +... +``` + +Vous pouvez spécifier qu'un seul `ARRAY JOIN` la clause dans une requête. + +L'ordre d'exécution de la requête est optimisé lors de l'exécution `ARRAY JOIN`. Bien `ARRAY JOIN` doit toujours être spécifié avant l' `WHERE/PREWHERE` clause, il peut être effectué soit avant `WHERE/PREWHERE` (si le résultat est nécessaire dans cette clause), ou après l'avoir terminé (pour réduire le volume de calculs). L'ordre de traitement est contrôlée par l'optimiseur de requête. + +Types pris en charge de `ARRAY JOIN` sont énumérés ci-dessous: + +- `ARRAY JOIN` - Dans ce cas, des tableaux vides ne sont pas inclus dans le résultat de `JOIN`. +- `LEFT ARRAY JOIN` - Le résultat de `JOIN` contient des lignes avec des tableaux vides. La valeur d'un tableau vide est définie sur la valeur par défaut pour le type d'élément de tableau (généralement 0, chaîne vide ou NULL). + +Les exemples ci-dessous illustrent l'utilisation de la `ARRAY JOIN` et `LEFT ARRAY JOIN` clause. Créons une table avec un [Tableau](../data_types/array.md) tapez colonne et insérez des valeurs dedans: + +``` sql +CREATE TABLE arrays_test +( + s String, + arr Array(UInt8) +) ENGINE = Memory; + +INSERT INTO arrays_test +VALUES ('Hello', [1,2]), ('World', [3,4,5]), ('Goodbye', []); +``` + +``` text +┌─s───────────┬─arr─────┐ +│ Hello │ [1,2] │ +│ World │ [3,4,5] │ +│ Goodbye │ [] │ +└─────────────┴─────────┘ +``` + +L'exemple ci-dessous utilise la `ARRAY JOIN` clause: + +``` sql +SELECT s, arr +FROM arrays_test +ARRAY JOIN arr; +``` + +``` text +┌─s─────┬─arr─┐ +│ Hello │ 1 │ +│ Hello │ 2 │ +│ World │ 3 │ +│ World │ 4 │ +│ World │ 5 │ +└───────┴─────┘ +``` + +L'exemple suivant utilise l' `LEFT ARRAY JOIN` clause: + +``` sql +SELECT s, arr +FROM arrays_test +LEFT ARRAY JOIN arr; +``` + +``` text +┌─s───────────┬─arr─┐ +│ Hello │ 1 │ +│ Hello │ 2 │ +│ World │ 3 │ +│ World │ 4 │ +│ World │ 5 │ +│ Goodbye │ 0 │ +└─────────────┴─────┘ +``` + +#### À L'Aide D'Alias {#using-aliases} + +Un alias peut être spécifié pour un tableau `ARRAY JOIN` clause. Dans ce cas, un élément de tableau peut être consulté par ce pseudonyme, mais le tableau lui-même est accessible par le nom d'origine. Exemple: + +``` sql +SELECT s, arr, a +FROM arrays_test +ARRAY JOIN arr AS a; +``` + +``` text +┌─s─────┬─arr─────┬─a─┐ +│ Hello │ [1,2] │ 1 │ +│ Hello │ [1,2] │ 2 │ +│ World │ [3,4,5] │ 3 │ +│ World │ [3,4,5] │ 4 │ +│ World │ [3,4,5] │ 5 │ +└───────┴─────────┴───┘ +``` + +En utilisant des alias, vous pouvez effectuer `ARRAY JOIN` avec un groupe externe. Exemple: + +``` sql +SELECT s, arr_external +FROM arrays_test +ARRAY JOIN [1, 2, 3] AS arr_external; +``` + +``` text +┌─s───────────┬─arr_external─┐ +│ Hello │ 1 │ +│ Hello │ 2 │ +│ Hello │ 3 │ +│ World │ 1 │ +│ World │ 2 │ +│ World │ 3 │ +│ Goodbye │ 1 │ +│ Goodbye │ 2 │ +│ Goodbye │ 3 │ +└─────────────┴──────────────┘ +``` + +Plusieurs tableaux peuvent être séparés par des virgules `ARRAY JOIN` clause. Dans ce cas, `JOIN` est effectuée avec eux simultanément (la somme directe, pas le produit cartésien). Notez que tous les tableaux doivent avoir la même taille. Exemple: + +``` sql +SELECT s, arr, a, num, mapped +FROM arrays_test +ARRAY JOIN arr AS a, arrayEnumerate(arr) AS num, arrayMap(x -> x + 1, arr) AS mapped; +``` + +``` text +┌─s─────┬─arr─────┬─a─┬─num─┬─mapped─┐ +│ Hello │ [1,2] │ 1 │ 1 │ 2 │ +│ Hello │ [1,2] │ 2 │ 2 │ 3 │ +│ World │ [3,4,5] │ 3 │ 1 │ 4 │ +│ World │ [3,4,5] │ 4 │ 2 │ 5 │ +│ World │ [3,4,5] │ 5 │ 3 │ 6 │ +└───────┴─────────┴───┴─────┴────────┘ +``` + +L'exemple ci-dessous utilise la [arrayEnumerate](functions/array_functions.md#array_functions-arrayenumerate) fonction: + +``` sql +SELECT s, arr, a, num, arrayEnumerate(arr) +FROM arrays_test +ARRAY JOIN arr AS a, arrayEnumerate(arr) AS num; +``` + +``` text +┌─s─────┬─arr─────┬─a─┬─num─┬─arrayEnumerate(arr)─┐ +│ Hello │ [1,2] │ 1 │ 1 │ [1,2] │ +│ Hello │ [1,2] │ 2 │ 2 │ [1,2] │ +│ World │ [3,4,5] │ 3 │ 1 │ [1,2,3] │ +│ World │ [3,4,5] │ 4 │ 2 │ [1,2,3] │ +│ World │ [3,4,5] │ 5 │ 3 │ [1,2,3] │ +└───────┴─────────┴───┴─────┴─────────────────────┘ +``` + +#### Jointure de tableau avec la Structure de données imbriquée {#array-join-with-nested-data-structure} + +`ARRAY`Rejoindre " fonctionne également avec [structures de données imbriquées](../data_types/nested_data_structures/nested.md). Exemple: + +``` sql +CREATE TABLE nested_test +( + s String, + nest Nested( + x UInt8, + y UInt32) +) ENGINE = Memory; + +INSERT INTO nested_test +VALUES ('Hello', [1,2], [10,20]), ('World', [3,4,5], [30,40,50]), ('Goodbye', [], []); +``` + +``` text +┌─s───────┬─nest.x──┬─nest.y─────┐ +│ Hello │ [1,2] │ [10,20] │ +│ World │ [3,4,5] │ [30,40,50] │ +│ Goodbye │ [] │ [] │ +└─────────┴─────────┴────────────┘ +``` + +``` sql +SELECT s, `nest.x`, `nest.y` +FROM nested_test +ARRAY JOIN nest; +``` + +``` text +┌─s─────┬─nest.x─┬─nest.y─┐ +│ Hello │ 1 │ 10 │ +│ Hello │ 2 │ 20 │ +│ World │ 3 │ 30 │ +│ World │ 4 │ 40 │ +│ World │ 5 │ 50 │ +└───────┴────────┴────────┘ +``` + +Lorsque vous spécifiez des noms de structures de données imbriquées dans `ARRAY JOIN` le sens est le même que `ARRAY JOIN` avec tous les éléments du tableau qui la compose. Des exemples sont énumérés ci-dessous: + +``` sql +SELECT s, `nest.x`, `nest.y` +FROM nested_test +ARRAY JOIN `nest.x`, `nest.y`; +``` + +``` text +┌─s─────┬─nest.x─┬─nest.y─┐ +│ Hello │ 1 │ 10 │ +│ Hello │ 2 │ 20 │ +│ World │ 3 │ 30 │ +│ World │ 4 │ 40 │ +│ World │ 5 │ 50 │ +└───────┴────────┴────────┘ +``` + +Cette variation a également du sens: + +``` sql +SELECT s, `nest.x`, `nest.y` +FROM nested_test +ARRAY JOIN `nest.x`; +``` + +``` text +┌─s─────┬─nest.x─┬─nest.y─────┐ +│ Hello │ 1 │ [10,20] │ +│ Hello │ 2 │ [10,20] │ +│ World │ 3 │ [30,40,50] │ +│ World │ 4 │ [30,40,50] │ +│ World │ 5 │ [30,40,50] │ +└───────┴────────┴────────────┘ +``` + +Un alias peut être utilisé pour une structure de données imbriquée, afin de sélectionner `JOIN` le résultat ou le tableau source. Exemple: + +``` sql +SELECT s, `n.x`, `n.y`, `nest.x`, `nest.y` +FROM nested_test +ARRAY JOIN nest AS n; +``` + +``` text +┌─s─────┬─n.x─┬─n.y─┬─nest.x──┬─nest.y─────┐ +│ Hello │ 1 │ 10 │ [1,2] │ [10,20] │ +│ Hello │ 2 │ 20 │ [1,2] │ [10,20] │ +│ World │ 3 │ 30 │ [3,4,5] │ [30,40,50] │ +│ World │ 4 │ 40 │ [3,4,5] │ [30,40,50] │ +│ World │ 5 │ 50 │ [3,4,5] │ [30,40,50] │ +└───────┴─────┴─────┴─────────┴────────────┘ +``` + +Exemple d'utilisation de l' [arrayEnumerate](functions/array_functions.md#array_functions-arrayenumerate) fonction: + +``` sql +SELECT s, `n.x`, `n.y`, `nest.x`, `nest.y`, num +FROM nested_test +ARRAY JOIN nest AS n, arrayEnumerate(`nest.x`) AS num; +``` + +``` text +┌─s─────┬─n.x─┬─n.y─┬─nest.x──┬─nest.y─────┬─num─┐ +│ Hello │ 1 │ 10 │ [1,2] │ [10,20] │ 1 │ +│ Hello │ 2 │ 20 │ [1,2] │ [10,20] │ 2 │ +│ World │ 3 │ 30 │ [3,4,5] │ [30,40,50] │ 1 │ +│ World │ 4 │ 40 │ [3,4,5] │ [30,40,50] │ 2 │ +│ World │ 5 │ 50 │ [3,4,5] │ [30,40,50] │ 3 │ +└───────┴─────┴─────┴─────────┴────────────┴─────┘ +``` + +### Clause de JOINTURE {#select-join} + +Rejoint les données dans la normale [SQL JOIN](https://en.wikipedia.org/wiki/Join_(SQL)) sens. + +!!! info "Note" + Pas liées à [ARRAY JOIN](#select-array-join-clause). + +``` sql +SELECT +FROM +[GLOBAL] [ANY|ALL] [INNER|LEFT|RIGHT|FULL|CROSS] [OUTER] JOIN +(ON )|(USING ) ... +``` + +Les noms de table peuvent être spécifiés au lieu de `` et ``. Ceci est équivalent à la `SELECT * FROM table` sous-requête, sauf dans un cas particulier lorsque la table a [Rejoindre](../operations/table_engines/join.md) engine – an array prepared for joining. + +#### Types pris en charge de `JOIN` {#select-join-types} + +- `INNER JOIN` (ou `JOIN`) +- `LEFT JOIN` (ou `LEFT OUTER JOIN`) +- `RIGHT JOIN` (ou `RIGHT OUTER JOIN`) +- `FULL JOIN` (ou `FULL OUTER JOIN`) +- `CROSS JOIN` (ou `,` ) + +Voir la norme [SQL JOIN](https://en.wikipedia.org/wiki/Join_(SQL)) Description. + +#### Plusieurs REJOINDRE {#multiple-join} + +En effectuant des requêtes, ClickHouse réécrit les jointures multi-tables dans la séquence des jointures à deux tables. Par exemple, S'il y a quatre tables pour join clickhouse rejoint la première et la seconde, puis rejoint le résultat avec la troisième table, et à la dernière étape, il rejoint la quatrième. + +Si une requête contient l' `WHERE` clickhouse essaie de pousser les filtres de cette clause à travers la jointure intermédiaire. S'il ne peut pas appliquer le filtre à chaque jointure intermédiaire, ClickHouse applique les filtres une fois toutes les jointures terminées. + +Nous recommandons l' `JOIN ON` ou `JOIN USING` syntaxe pour créer des requêtes. Exemple: + +``` sql +SELECT * FROM t1 JOIN t2 ON t1.a = t2.a JOIN t3 ON t1.a = t3.a +``` + +Vous pouvez utiliser des listes de tables séparées par des virgules `FROM` clause. Exemple: + +``` sql +SELECT * FROM t1, t2, t3 WHERE t1.a = t2.a AND t1.a = t3.a +``` + +Ne mélangez pas ces syntaxes. + +ClickHouse ne supporte pas directement la syntaxe avec des virgules, Nous ne recommandons donc pas de les utiliser. L'algorithme tente de réécrire la requête en termes de `CROSS JOIN` et `INNER JOIN` clauses et procède ensuite au traitement des requêtes. Lors de la réécriture de la requête, ClickHouse tente d'optimiser les performances et la consommation de mémoire. Par défaut, ClickHouse traite les virgules comme `INNER JOIN` clause et convertit `INNER JOIN` de `CROSS JOIN` lorsque l'algorithme ne peut pas garantir que `INNER JOIN` retourne les données requises. + +#### Rigueur {#select-join-strictness} + +- `ALL` — If the right table has several matching rows, ClickHouse creates a [Produit cartésien](https://en.wikipedia.org/wiki/Cartesian_product) à partir des lignes correspondantes. C'est la norme `JOIN` comportement en SQL. +- `ANY` — If the right table has several matching rows, only the first one found is joined. If the right table has only one matching row, the results of queries with `ANY` et `ALL` les mots clés sont les mêmes. +- `ASOF` — For joining sequences with a non-exact match. `ASOF JOIN` l'utilisation est décrite ci-dessous. + +**ASOF joindre L'utilisation** + +`ASOF JOIN` est utile lorsque vous devez joindre des enregistrements qui n'ont pas de correspondance exacte. + +Tables pour `ASOF JOIN` doit avoir une colonne de séquence ordonnée. Cette colonne ne peut pas être seule dans une table et doit être l'un des types de données: `UInt32`, `UInt64`, `Float32`, `Float64`, `Date`, et `DateTime`. + +Syntaxe `ASOF JOIN ... ON`: + +``` sql +SELECT expressions_list +FROM table_1 +ASOF LEFT JOIN table_2 +ON equi_cond AND closest_match_cond +``` + +Vous pouvez utiliser n'importe quel nombre de conditions d'égalité et exactement une condition de correspondance la plus proche. Exemple, `SELECT count() FROM table_1 ASOF LEFT JOIN table_2 ON table_1.a == table_2.b AND table_2.t <= table_1.t`. + +Conditions prises en charge pour la correspondance la plus proche: `>`, `>=`, `<`, `<=`. + +Syntaxe `ASOF JOIN ... USING`: + +``` sql +SELECT expressions_list +FROM table_1 +ASOF JOIN table_2 +USING (equi_column1, ... equi_columnN, asof_column) +``` + +`ASOF JOIN` utiliser `equi_columnX` pour rejoindre sur l'égalité et `asof_column` pour rejoindre le match le plus proche avec le `table_1.asof_column >= table_2.asof_column` condition. Le `asof_column` colonne toujours la dernière dans le `USING` clause. + +Par exemple, considérez les tableaux suivants: + +``` text + table_1 table_2 + + event | ev_time | user_id event | ev_time | user_id +----------|---------|---------- ----------|---------|---------- + ... ... +event_1_1 | 12:00 | 42 event_2_1 | 11:59 | 42 + ... event_2_2 | 12:30 | 42 +event_1_2 | 13:00 | 42 event_2_3 | 13:00 | 42 + ... ... +``` + +`ASOF JOIN` peut prendre la date d'un événement utilisateur de `table_1` et trouver un événement dans `table_2` où le timestamp est plus proche de l'horodatage de l'événement à partir de `table_1` correspondant à la condition de correspondance la plus proche. Les valeurs d'horodatage égales sont les plus proches si elles sont disponibles. Ici, l' `user_id` la colonne peut être utilisée pour joindre sur l'égalité et le `ev_time` la colonne peut être utilisée pour se joindre à la correspondance la plus proche. Dans notre exemple, `event_1_1` peut être jointe à `event_2_1` et `event_1_2` peut être jointe à `event_2_3`, mais `event_2_2` ne peut pas être rejoint. + +!!! note "Note" + `ASOF` jointure est **pas** pris en charge dans le [Rejoindre](../operations/table_engines/join.md) tableau moteur. + +Pour définir la valeur de rigueur par défaut, utilisez le paramètre de configuration de session [join\_default\_strictness](../operations/settings/settings.md#settings-join_default_strictness). + +#### GLOBAL JOIN {#global-join} + +Lors de l'utilisation normale `JOIN` la requête est envoyée aux serveurs distants. Les sous-requêtes sont exécutées sur chacune d'elles afin de créer la bonne table, et la jointure est effectuée avec cette table. En d'autres termes, la table de droite est formée sur chaque serveur séparément. + +Lors de l'utilisation de `GLOBAL ... JOIN`, d'abord le serveur demandeur exécute une sous-requête pour calculer la bonne table. Cette table temporaire est transmise à chaque serveur distant, et les requêtes sont exécutées sur eux en utilisant les données temporaires qui ont été transmises. + +Soyez prudent lorsque vous utilisez `GLOBAL`. Pour plus d'informations, consultez la section [Sous-requêtes distribuées](#select-distributed-subqueries). + +#### Recommandations D'Utilisation {#usage-recommendations} + +Lors de l'exécution d'un `JOIN`, il n'y a pas d'optimisation de la commande d'exécution par rapport aux autres stades de la requête. La jointure (une recherche dans la table de droite) est exécutée avant de filtrer `WHERE` et avant l'agrégation. Afin de définir explicitement l'ordre de traitement, nous vous recommandons d'exécuter une `JOIN` sous-requête avec une sous-requête. + +Exemple: + +``` sql +SELECT + CounterID, + hits, + visits +FROM +( + SELECT + CounterID, + count() AS hits + FROM test.hits + GROUP BY CounterID +) ANY LEFT JOIN +( + SELECT + CounterID, + sum(Sign) AS visits + FROM test.visits + GROUP BY CounterID +) USING CounterID +ORDER BY hits DESC +LIMIT 10 +``` + +``` text +┌─CounterID─┬───hits─┬─visits─┐ +│ 1143050 │ 523264 │ 13665 │ +│ 731962 │ 475698 │ 102716 │ +│ 722545 │ 337212 │ 108187 │ +│ 722889 │ 252197 │ 10547 │ +│ 2237260 │ 196036 │ 9522 │ +│ 23057320 │ 147211 │ 7689 │ +│ 722818 │ 90109 │ 17847 │ +│ 48221 │ 85379 │ 4652 │ +│ 19762435 │ 77807 │ 7026 │ +│ 722884 │ 77492 │ 11056 │ +└───────────┴────────┴────────┘ +``` + +Les sous-requêtes ne vous permettent pas de définir des noms ou de les utiliser pour référencer une colonne à partir d'une sous-requête spécifique. +Les colonnes spécifiées dans `USING` doit avoir les mêmes noms dans les deux sous-requêtes, et les autres colonnes doivent être nommées différemment. Vous pouvez utiliser des alias pour les noms des colonnes dans les sous-requêtes (l'exemple utilise l'alias `hits` et `visits`). + +Le `USING` clause spécifie une ou plusieurs colonnes de jointure, qui établit l'égalité de ces colonnes. La liste des colonnes est définie sans crochets. Les conditions de jointure plus complexes ne sont pas prises en charge. + +La table de droite (le résultat de la sous-requête) réside dans la RAM. S'il n'y a pas assez de mémoire, vous ne pouvez pas exécuter un `JOIN`. + +Chaque fois qu'une requête est exécutée avec la même `JOIN`, la sous-requête est exécutée à nouveau car le résultat n'est pas mis en cache. Pour éviter cela, utilisez la spéciale [Rejoindre](../operations/table_engines/join.md) table engine, qui est un tableau préparé pour l'assemblage qui est toujours en RAM. + +Dans certains cas, il est plus efficace d'utiliser `IN` plutôt `JOIN`. +Parmi les différents types de `JOIN`, le plus efficace est d' `ANY LEFT JOIN`, puis `ANY INNER JOIN`. Les moins efficaces sont `ALL LEFT JOIN` et `ALL INNER JOIN`. + +Si vous avez besoin d'un `JOIN` pour se joindre à des tables de dimension (ce sont des tables relativement petites qui contiennent des propriétés de dimension, telles que des noms pour des campagnes publicitaires), un `JOIN` peut-être pas très pratique en raison du fait que la bonne table est ré-accédée pour chaque requête. Pour de tels cas, il y a un “external dictionaries” la fonctionnalité que vous devez utiliser à la place de `JOIN`. Pour plus d'informations, consultez la section [Dictionnaires externes](dicts/external_dicts.md). + +**Limitations De Mémoire** + +ClickHouse utilise le [jointure de hachage](https://en.wikipedia.org/wiki/Hash_join) algorithme. ClickHouse prend le `` et crée une table de hachage pour cela dans la RAM. Si vous devez restreindre la consommation de mémoire de l'opération join utilisez les paramètres suivants: + +- [max\_rows\_in\_join](../operations/settings/query_complexity.md#settings-max_rows_in_join) — Limits number of rows in the hash table. +- [max\_bytes\_in\_join](../operations/settings/query_complexity.md#settings-max_bytes_in_join) — Limits size of the hash table. + +Lorsque l'une de ces limites est atteinte, ClickHouse agit comme [join\_overflow\_mode](../operations/settings/query_complexity.md#settings-join_overflow_mode) réglage des instructions. + +#### Traitement des cellules vides ou nulles {#processing-of-empty-or-null-cells} + +Lors de la jonction de tables, les cellules vides peuvent apparaître. Paramètre [join\_use\_nulls](../operations/settings/settings.md#join_use_nulls) définir comment clickhouse remplit ces cellules. + +Si l' `JOIN` les touches sont [Nullable](../data_types/nullable.md) champs, les lignes où au moins une des clés a la valeur [NULL](syntax.md#null-literal) ne sont pas jointes. + +#### Limitations De Syntaxe {#syntax-limitations} + +Pour plusieurs `JOIN` clauses dans un seul `SELECT` requête: + +- Prendre toutes les colonnes via `*` n'est disponible que si les tables sont jointes, pas les sous-requêtes. +- Le `PREWHERE` la clause n'est pas disponible. + +Pour `ON`, `WHERE`, et `GROUP BY` clause: + +- Les expressions arbitraires ne peuvent pas être utilisées dans `ON`, `WHERE`, et `GROUP BY` mais vous pouvez définir une expression dans un `SELECT` clause et ensuite l'utiliser dans ces clauses via un alias. + +### Clause where {#select-where} + +S'il existe une clause WHERE, elle doit contenir une expression de type UInt8. C'est généralement une expression avec comparaison et opérateurs logiques. +Cette expression est utilisée pour filtrer les données avant toutes les autres transformations. + +Si les index sont pris en charge par le moteur de table de base de données, l'expression est évaluée sur la possibilité d'utiliser des index. + +### Clause PREWHERE {#prewhere-clause} + +Cette clause a le même sens que la clause WHERE. La différence est dans laquelle les données sont lues à partir de la table. +Lors de L'utilisation de PREWHERE, d'abord, seules les colonnes nécessaires à L'exécution de PREWHERE sont lues. Ensuite, les autres colonnes sont lues qui sont nécessaires pour exécuter la requête, mais seulement les blocs où L'expression PREWHERE est vraie. + +Il est logique d'utiliser PREWHERE s'il existe des conditions de filtration qui sont utilisées par une minorité de colonnes dans la requête, mais qui fournissent une filtration de données forte. Cela réduit le volume de données à lire. + +Par exemple, il est utile d'écrire PREWHERE pour les requêtes qui extraient un grand nombre de colonnes, mais qui n'ont que la filtration pour quelques colonnes. + +PREWHERE est uniquement pris en charge par les tables `*MergeTree` famille. + +Une requête peut spécifier simultanément PREWHERE et WHERE. Dans ce cas, PREWHERE précède WHERE. + +Si l' ‘optimize\_move\_to\_prewhere’ le paramètre est défini sur 1 et PREWHERE est omis, le système utilise des heuristiques pour déplacer automatiquement des parties d'expressions D'où vers PREWHERE. + +### Clause GROUP BY {#select-group-by-clause} + +C'est l'une des parties les plus importantes d'un SGBD orienté colonne. + +S'il existe une clause GROUP BY, elle doit contenir une liste d'expressions. Chaque expression sera appelée ici comme “key”. +Toutes les expressions des clauses SELECT, HAVING et ORDER BY doivent être calculées à partir de clés ou de fonctions d'agrégation. En d'autres termes, chaque colonne sélectionnée dans la table doit être utilisée soit dans les clés, soit dans les fonctions d'agrégation. + +Si une requête ne contient que des colonnes de table dans les fonctions d'agrégation, la clause GROUP BY peut être omise et l'agrégation par un ensemble de clés vide est supposée. + +Exemple: + +``` sql +SELECT + count(), + median(FetchTiming > 60 ? 60 : FetchTiming), + count() - sum(Refresh) +FROM hits +``` + +Cependant, contrairement au SQL standard, si la table n'a pas de lignes (soit il n'y en a pas du tout, soit il n'y en a pas après avoir utilisé WHERE to filter), un résultat vide est renvoyé, et non le résultat d'une des lignes contenant les valeurs initiales des fonctions d'agrégat. + +Contrairement à MySQL (et conforme à SQL standard), vous ne pouvez pas obtenir une valeur d'une colonne qui n'est pas dans une fonction clé ou agrégée (sauf les expressions constantes). Pour contourner ce problème, vous pouvez utiliser le ‘any’ fonction d'agrégation (récupère la première valeur rencontrée) ou ‘min/max’. + +Exemple: + +``` sql +SELECT + domainWithoutWWW(URL) AS domain, + count(), + any(Title) AS title -- getting the first occurred page header for each domain. +FROM hits +GROUP BY domain +``` + +Pour chaque valeur de clé différente rencontrée, GROUP BY calcule un ensemble de valeurs de fonction d'agrégation. + +GROUP BY n'est pas pris en charge pour les colonnes de tableau. + +Une constante ne peut pas être spécifiée comme arguments pour les fonctions d'agrégation. Exemple: somme(1). Au lieu de cela, vous pouvez vous débarrasser de la constante. Exemple: `count()`. + +#### Le traitement NULL {#null-processing} + +Pour le regroupement, ClickHouse interprète [NULL](syntax.md) comme une valeur, et `NULL=NULL`. + +Voici un exemple pour montrer ce que cela signifie. + +Supposons que vous avez cette table: + +``` text +┌─x─┬────y─┐ +│ 1 │ 2 │ +│ 2 │ ᴺᵁᴸᴸ │ +│ 3 │ 2 │ +│ 3 │ 3 │ +│ 3 │ ᴺᵁᴸᴸ │ +└───┴──────┘ +``` + +Requête `SELECT sum(x), y FROM t_null_big GROUP BY y` résultats dans: + +``` text +┌─sum(x)─┬────y─┐ +│ 4 │ 2 │ +│ 3 │ 3 │ +│ 5 │ ᴺᵁᴸᴸ │ +└────────┴──────┘ +``` + +Vous pouvez voir que `GROUP BY` pour `y = NULL` résumer `x` comme si `NULL` a cette valeur. + +Si vous passez plusieurs clés `GROUP BY` le résultat vous donnera toutes les combinaisons de la sélection, comme si `NULL` ont une valeur spécifique. + +#### Avec modificateur de totaux {#with-totals-modifier} + +Si le modificateur avec totaux est spécifié, une autre ligne sera calculée. Cette ligne aura des colonnes clés contenant des valeurs par défaut (zéros ou lignes vides), et des colonnes de fonctions d'agrégat avec les valeurs calculées sur toutes les lignes (le “total” valeur). + +Cette ligne supplémentaire est sortie dans les formats JSON\*, TabSeparated\* et Pretty\*, séparément des autres lignes. Dans les autres formats, cette ligne n'est pas sortie. + +Dans les formats JSON\*, cette ligne est sortie en tant que ‘totals’ champ. Dans les formats TabSeparated\*, la ligne vient après le résultat principal, précédée d'une ligne vide (après les autres données). Dans les formats Pretty\*, la ligne est sortie sous forme de table séparée après le résultat principal. + +`WITH TOTALS` peut être exécuté de différentes manières lorsqu'il est présent. Le comportement dépend de l' ‘totals\_mode’ paramètre. +Par défaut, `totals_mode = 'before_having'`. Dans ce cas, ‘totals’ est calculé sur toutes les lignes, y compris celles qui ne passent pas par ‘max\_rows\_to\_group\_by’. + +Les autres alternatives incluent uniquement les lignes qui passent à travers avoir dans ‘totals’, et se comporter différemment avec le réglage `max_rows_to_group_by` et `group_by_overflow_mode = 'any'`. + +`after_having_exclusive` – Don't include rows that didn't pass through `max_rows_to_group_by`. En d'autres termes, ‘totals’ aura moins ou le même nombre de lignes que si `max_rows_to_group_by` ont été omis. + +`after_having_inclusive` – Include all the rows that didn't pass through ‘max\_rows\_to\_group\_by’ dans ‘totals’. En d'autres termes, ‘totals’ aura plus ou le même nombre de lignes que si `max_rows_to_group_by` ont été omis. + +`after_having_auto` – Count the number of rows that passed through HAVING. If it is more than a certain amount (by default, 50%), include all the rows that didn't pass through ‘max\_rows\_to\_group\_by’ dans ‘totals’. Sinon, ne pas les inclure. + +`totals_auto_threshold` – By default, 0.5. The coefficient for `after_having_auto`. + +Si `max_rows_to_group_by` et `group_by_overflow_mode = 'any'` ne sont pas utilisés, toutes les variations de `after_having` sont les mêmes, et vous pouvez utiliser l'un d'eux (par exemple, `after_having_auto`). + +Vous pouvez utiliser avec les totaux dans les sous-requêtes, y compris les sous-requêtes dans la clause JOIN (dans ce cas, les valeurs totales respectives sont combinées). + +#### Groupe par dans la mémoire externe {#select-group-by-in-external-memory} + +Vous pouvez activer le dumping des données temporaires sur le disque pour limiter l'utilisation de la mémoire pendant `GROUP BY`. +Le [max\_bytes\_before\_external\_group\_by](../operations/settings/settings.md#settings-max_bytes_before_external_group_by) réglage détermine le seuil de consommation de RAM pour le dumping `GROUP BY` données temporaires dans le système de fichiers. Si elle est définie sur 0 (valeur par défaut), elle est désactivée. + +Lors de l'utilisation de `max_bytes_before_external_group_by`, nous vous recommandons de définir `max_memory_usage` environ deux fois plus élevé. Ceci est nécessaire car il y a deux étapes à l'agrégation: la lecture de la date et la formation des données intermédiaires (1) et la fusion des données intermédiaires (2). Le Dumping des données dans le système de fichiers ne peut se produire qu'au cours de l'étape 1. Si les données temporaires n'ont pas été vidées, l'étape 2 peut nécessiter jusqu'à la même quantité de mémoire qu'à l'étape 1. + +Par exemple, si [max\_memory\_usage](../operations/settings/settings.md#settings_max_memory_usage) a été défini sur 10000000000 et que vous souhaitez utiliser l'agrégation externe, il est logique de définir `max_bytes_before_external_group_by` à 10000000000, et max\_memory\_usage à 20000000000. Lorsque l'agrégation externe est déclenchée (s'il y a eu au moins un vidage de données temporaires), la consommation maximale de RAM n'est que légèrement supérieure à `max_bytes_before_external_group_by`. + +Avec le traitement des requêtes distribuées, l'agrégation externe est effectuée sur des serveurs distants. Pour que le serveur demandeur n'utilise qu'une petite quantité de RAM, définissez `distributed_aggregation_memory_efficient` 1. + +Lors de la fusion de données vidées sur le disque, ainsi que lors de la fusion des résultats de serveurs distants lorsque `distributed_aggregation_memory_efficient` paramètre est activé, consomme jusqu'à `1/256 * the_number_of_threads` à partir de la quantité totale de mémoire RAM. + +Lorsque l'agrégation externe est activée, s'il y a moins de `max_bytes_before_external_group_by` of data (i.e. data was not flushed), the query runs just as fast as without external aggregation. If any temporary data was flushed, the run time will be several times longer (approximately three times). + +Si vous avez un `ORDER BY` avec un `LIMIT` après `GROUP BY` puis la quantité de RAM dépend de la quantité de données dans `LIMIT`, pas dans l'ensemble de la table. Mais si l' `ORDER BY` n'a pas `LIMIT`, n'oubliez pas d'activer externe de tri (`max_bytes_before_external_sort`). + +### Limite par Clause {#limit-by-clause} + +Une requête avec l' `LIMIT n BY expressions` la clause sélectionne le premier `n` lignes pour chaque valeur distincte de `expressions`. La clé pour `LIMIT BY` peut contenir n'importe quel nombre de [expression](syntax.md#syntax-expressions). + +ClickHouse prend en charge la syntaxe suivante: + +- `LIMIT [offset_value, ]n BY expressions` +- `LIMIT n OFFSET offset_value BY expressions` + +Pendant le traitement de la requête, ClickHouse sélectionne les données classées par clé de tri. La clé de tri est définie explicitement à l'aide [ORDER BY](#select-order-by) clause ou implicitement en tant que propriété du moteur de table. Puis clickhouse s'applique `LIMIT n BY expressions` et renvoie le premier `n` lignes pour chaque combinaison distincte de `expressions`. Si `OFFSET` est spécifié, puis pour chaque bloc de données qui appartient à une combinaison particulière de `expressions`, Clickhouse saute `offset_value` nombre de lignes depuis le début du bloc et renvoie un maximum de `n` les lignes en conséquence. Si `offset_value` est plus grand que le nombre de lignes dans le bloc de données, ClickHouse renvoie zéro lignes du bloc. + +`LIMIT BY` n'est pas liée à `LIMIT`. Ils peuvent tous deux être utilisés dans la même requête. + +**Exemple** + +Exemple de table: + +``` sql +CREATE TABLE limit_by(id Int, val Int) ENGINE = Memory; +INSERT INTO limit_by values(1, 10), (1, 11), (1, 12), (2, 20), (2, 21); +``` + +Requête: + +``` sql +SELECT * FROM limit_by ORDER BY id, val LIMIT 2 BY id +``` + +``` text +┌─id─┬─val─┐ +│ 1 │ 10 │ +│ 1 │ 11 │ +│ 2 │ 20 │ +│ 2 │ 21 │ +└────┴─────┘ +``` + +``` sql +SELECT * FROM limit_by ORDER BY id, val LIMIT 1, 2 BY id +``` + +``` text +┌─id─┬─val─┐ +│ 1 │ 11 │ +│ 1 │ 12 │ +│ 2 │ 21 │ +└────┴─────┘ +``` + +Le `SELECT * FROM limit_by ORDER BY id, val LIMIT 2 OFFSET 1 BY id` requête renvoie le même résultat. + +La requête suivante renvoie les 5 principaux référents pour chaque `domain, device_type` paire avec un maximum de 100 lignes au total (`LIMIT n BY + LIMIT`). + +``` sql +SELECT + domainWithoutWWW(URL) AS domain, + domainWithoutWWW(REFERRER_URL) AS referrer, + device_type, + count() cnt +FROM hits +GROUP BY domain, referrer, device_type +ORDER BY cnt DESC +LIMIT 5 BY domain, device_type +LIMIT 100 +``` + +### Clause HAVING {#having-clause} + +Permet de filtrer le résultat reçu après GROUP BY, similaire à la clause WHERE. +Où et ayant diffèrent en ce que Où est effectué avant l'agrégation (GROUP BY), tout en ayant est effectué après. +Si l'agrégation n'est pas effectuée, HAVING ne peut pas être utilisé. + +### Clause ORDER BY {#select-order-by} + +La clause ORDER BY contient une liste d'expressions, qui peuvent chacune être affectées à DESC ou ASC (la direction de tri). Si la direction n'est pas spécifiée, ASC est supposé. ASC est trié dans l'ordre croissant, et DESC dans l'ordre décroissant. La direction de tri s'applique à une seule expression, pas à la liste entière. Exemple: `ORDER BY Visits DESC, SearchPhrase` + +Pour le tri par valeurs de chaîne, vous pouvez spécifier le classement (comparaison). Exemple: `ORDER BY SearchPhrase COLLATE 'tr'` - pour le tri par mot-clé dans l'ordre croissant, en utilisant l'alphabet turc, insensible à la casse, en supposant que les chaînes sont encodées en UTF-8. COLLATE peut être spécifié ou non pour chaque expression dans L'ordre par indépendamment. Si ASC ou DESC est spécifié, COLLATE est spécifié après. Lors de L'utilisation de COLLATE, le tri est toujours insensible à la casse. + +Nous recommandons uniquement D'utiliser COLLATE pour le tri final d'un petit nombre de lignes, car le tri avec COLLATE est moins efficace que le tri normal par octets. + +Les lignes qui ont des valeurs identiques pour la liste des expressions de tri sont sorties dans un ordre arbitraire, qui peut également être non déterministe (différent à chaque fois). +Si la clause ORDER BY est omise, l'ordre des lignes est également indéfini et peut également être non déterministe. + +`NaN` et `NULL` ordre de tri: + +- Avec le modificateur `NULLS FIRST` — First `NULL`, puis `NaN` puis d'autres valeurs. +- Avec le modificateur `NULLS LAST` — First the values, then `NaN`, puis `NULL`. +- Default — The same as with the `NULLS LAST` modificateur. + +Exemple: + +Pour la table + +``` text +┌─x─┬────y─┐ +│ 1 │ ᴺᵁᴸᴸ │ +│ 2 │ 2 │ +│ 1 │ nan │ +│ 2 │ 2 │ +│ 3 │ 4 │ +│ 5 │ 6 │ +│ 6 │ nan │ +│ 7 │ ᴺᵁᴸᴸ │ +│ 6 │ 7 │ +│ 8 │ 9 │ +└───┴──────┘ +``` + +Exécuter la requête `SELECT * FROM t_null_nan ORDER BY y NULLS FIRST` obtenir: + +``` text +┌─x─┬────y─┐ +│ 1 │ ᴺᵁᴸᴸ │ +│ 7 │ ᴺᵁᴸᴸ │ +│ 1 │ nan │ +│ 6 │ nan │ +│ 2 │ 2 │ +│ 2 │ 2 │ +│ 3 │ 4 │ +│ 5 │ 6 │ +│ 6 │ 7 │ +│ 8 │ 9 │ +└───┴──────┘ +``` + +Lorsque les nombres à virgule flottante sont triés, les Nan sont séparés des autres valeurs. Quel que soit l'ordre de tri, NaNs viennent à la fin. En d'autres termes, pour le Tri ascendant, ils sont placés comme s'ils étaient plus grands que tous les autres nombres, tandis que pour le Tri descendant, ils sont placés comme s'ils étaient plus petits que les autres. + +Moins de RAM est utilisé si une limite assez petite est spécifiée en plus de ORDER BY. Sinon, la quantité de mémoire dépensée est proportionnelle au volume de données à trier. Pour le traitement des requêtes distribuées, si GROUP BY est omis, le tri est partiellement effectué sur des serveurs distants et les résultats sont fusionnés sur le serveur demandeur. Cela signifie que pour le tri distribué, le volume de données à trier peut être supérieur à la quantité de mémoire sur un seul serveur. + +S'il N'y a pas assez de RAM, il est possible d'effectuer un tri dans la mémoire externe (création de fichiers temporaires sur un disque). Utilisez le paramètre `max_bytes_before_external_sort` pour ce but. S'il est défini sur 0 (par défaut), le tri externe est désactivé. Si elle est activée, lorsque le volume de données à trier atteint le nombre spécifié d'octets, les données collectées sont triés et déposés dans un fichier temporaire. Une fois toutes les données lues, tous les fichiers triés sont fusionnés et les résultats sont générés. Les fichiers sont écrits dans le répertoire/var/lib / clickhouse / tmp / dans la configuration (par défaut, mais vous pouvez ‘tmp\_path’ paramètre pour modifier ce paramètre). + +L'exécution d'une requête peut utiliser plus de mémoire que ‘max\_bytes\_before\_external\_sort’. Pour cette raison, ce paramètre doit avoir une valeur significativement inférieure à ‘max\_memory\_usage’. Par exemple, si votre serveur dispose de 128 Go de RAM et que vous devez exécuter une seule requête, définissez ‘max\_memory\_usage’ à 100 Go, et ‘max\_bytes\_before\_external\_sort’ à 80 Go. + +Le tri externe fonctionne beaucoup moins efficacement que le tri dans la RAM. + +### Clause SELECT {#select-select} + +[Expression](syntax.md#syntax-expressions) spécifié dans le `SELECT` clause sont calculés après toutes les opérations dans les clauses décrites ci-dessus sont terminés. Ces expressions fonctionnent comme si elles s'appliquaient à des lignes séparées dans le résultat. Si les expressions dans le `SELECT` la clause contient des fonctions d'agrégation, puis clickhouse traite les fonctions d'agrégation et les expressions utilisées [GROUP BY](#select-group-by-clause) agrégation. + +Si vous souhaitez inclure toutes les colonnes dans le résultat, utilisez l'astérisque (`*`) symbole. Exemple, `SELECT * FROM ...`. + +Pour correspondre à certaines colonnes dans le résultat avec un [re2](https://en.wikipedia.org/wiki/RE2_(software)) expression régulière, vous pouvez utiliser le `COLUMNS` expression. + +``` sql +COLUMNS('regexp') +``` + +Par exemple, considérez le tableau: + +``` sql +CREATE TABLE default.col_names (aa Int8, ab Int8, bc Int8) ENGINE = TinyLog +``` + +La requête suivante sélectionne les données de toutes les colonnes contenant les `a` symbole dans leur nom. + +``` sql +SELECT COLUMNS('a') FROM col_names +``` + +``` text +┌─aa─┬─ab─┐ +│ 1 │ 1 │ +└────┴────┘ +``` + +Les colonnes sélectionnées sont retournés pas dans l'ordre alphabétique. + +Vous pouvez utiliser plusieurs `COLUMNS` expressions dans une requête et leur appliquer des fonctions. + +Exemple: + +``` sql +SELECT COLUMNS('a'), COLUMNS('c'), toTypeName(COLUMNS('c')) FROM col_names +``` + +``` text +┌─aa─┬─ab─┬─bc─┬─toTypeName(bc)─┐ +│ 1 │ 1 │ 1 │ Int8 │ +└────┴────┴────┴────────────────┘ +``` + +Chaque colonne renvoyée par le `COLUMNS` expression est passée à la fonction en tant qu'argument séparé. Vous pouvez également passer d'autres arguments à la fonction si elle les supporte. Soyez prudent lorsque vous utilisez des fonctions. Si une fonction ne prend pas en charge le nombre d'arguments que vous lui avez transmis, ClickHouse lève une exception. + +Exemple: + +``` sql +SELECT COLUMNS('a') + COLUMNS('c') FROM col_names +``` + +``` text +Received exception from server (version 19.14.1): +Code: 42. DB::Exception: Received from localhost:9000. DB::Exception: Number of arguments for function plus doesn't match: passed 3, should be 2. +``` + +Dans cet exemple, `COLUMNS('a')` retourne deux colonnes: `aa` et `ab`. `COLUMNS('c')` renvoie la `bc` colonne. Le `+` l'opérateur ne peut pas s'appliquer à 3 arguments, donc ClickHouse lève une exception avec le message pertinent. + +Colonnes qui correspondent à la `COLUMNS` l'expression peut avoir différents types de données. Si `COLUMNS` ne correspond à aucune colonne et est la seule expression dans `SELECT`, ClickHouse lance une exception. + +### La Clause DISTINCT {#select-distinct} + +Si DISTINCT est spécifié, une seule ligne restera hors de tous les ensembles de lignes entièrement correspondantes dans le résultat. +Le résultat sera le même que si GROUP BY était spécifié dans tous les champs spécifiés dans SELECT without aggregate functions. Mais il y a plusieurs différences de GROUP BY: + +- DISTINCT peut être appliqué avec GROUP BY. +- Lorsque ORDER BY est omis et que LIMIT est défini, la requête s'arrête immédiatement après la lecture du nombre requis de lignes différentes. +- Les blocs de données sont produits au fur et à mesure qu'ils sont traités, sans attendre que la requête entière se termine. + +DISTINCT n'est pas pris en charge si SELECT a au moins une colonne de tableau. + +`DISTINCT` fonctionne avec [NULL](syntax.md) comme si `NULL` ont une valeur spécifique, et `NULL=NULL`. En d'autres termes, dans le `DISTINCT` résultats, différentes combinaisons avec `NULL` qu'une seule fois. + +Clickhouse prend en charge l'utilisation du `DISTINCT` et `ORDER BY` clauses pour différentes colonnes dans une requête. Le `DISTINCT` la clause est exécutée avant la `ORDER BY` clause. + +Exemple de table: + +``` text +┌─a─┬─b─┐ +│ 2 │ 1 │ +│ 1 │ 2 │ +│ 3 │ 3 │ +│ 2 │ 4 │ +└───┴───┘ +``` + +Lors de la sélection de données avec le `SELECT DISTINCT a FROM t1 ORDER BY b ASC` requête, nous obtenons le résultat suivant: + +``` text +┌─a─┐ +│ 2 │ +│ 1 │ +│ 3 │ +└───┘ +``` + +Si nous changeons la direction de tri `SELECT DISTINCT a FROM t1 ORDER BY b DESC`, nous obtenons le résultat suivant: + +``` text +┌─a─┐ +│ 3 │ +│ 1 │ +│ 2 │ +└───┘ +``` + +Rangée `2, 4` a été coupé avant de les trier. + +Prenez en compte cette spécificité d'implémentation lors de la programmation des requêtes. + +### Clause LIMIT {#limit-clause} + +`LIMIT m` vous permet de sélectionner la première `m` lignes du résultat. + +`LIMIT n, m` vous permet de sélectionner la première `m` lignes du résultat après avoir sauté le premier `n` rangée. Le `LIMIT m OFFSET n` la syntaxe est également prise en charge. + +`n` et `m` doivent être des entiers non négatifs. + +Si il n'y a pas un `ORDER BY` clause qui trie explicitement les résultats, le résultat peut être arbitraire et non déterministe. + +### Clause UNION ALL {#union-all-clause} + +Vous pouvez utiliser UNION ALL pour combiner n'importe quel nombre de requêtes. Exemple: + +``` sql +SELECT CounterID, 1 AS table, toInt64(count()) AS c + FROM test.hits + GROUP BY CounterID + +UNION ALL + +SELECT CounterID, 2 AS table, sum(Sign) AS c + FROM test.visits + GROUP BY CounterID + HAVING c > 0 +``` + +Seule UNION ALL est prise en charge. L'UNION régulière (Union distincte) n'est pas prise en charge. Si vous avez besoin D'UNION DISTINCT, vous pouvez écrire SELECT DISTINCT à partir d'une sous-requête contenant UNION ALL. + +Les requêtes qui font partie de L'UNION peuvent toutes être exécutées simultanément et leurs résultats peuvent être mélangés. + +La structure des résultats (le nombre et le type de colonnes) doit correspondre aux requêtes. Mais les noms des colonnes peuvent différer. Dans ce cas, les noms de colonne pour le résultat final seront tirés de la première requête. La coulée de Type est effectuée pour les syndicats. Par exemple, si deux requêtes combinées ont le même champ avec non-`Nullable` et `Nullable` types d'un type compatible, la `UNION ALL` a un `Nullable` type de champ. + +Les requêtes qui font partie de UNION ALL ne peuvent pas être placées entre crochets. ORDER BY et LIMIT sont appliqués à des requêtes distinctes, pas au résultat final. Si vous devez appliquer une conversion au résultat final, vous pouvez placer toutes les requêtes avec UNION ALL dans une sous-requête de la clause FROM. + +### Dans OUTFILE Clause {#into-outfile-clause} + +Ajouter l' `INTO OUTFILE filename` clause (où filename est un littéral de chaîne) pour rediriger la sortie de la requête vers le fichier spécifié. +Contrairement à MySQL, le fichier est créé du côté client. La requête échouera si un fichier portant le même nom existe déjà. +Cette fonctionnalité est disponible dans le client de ligne de commande et clickhouse-local (une requête envoyée via L'interface HTTP échouera). + +Le format de sortie par défaut est TabSeparated (le même que dans le mode batch client de ligne de commande). + +### FORMAT de la Clause {#format-clause} + +Spécifier ‘FORMAT format’ pour obtenir des données dans n'importe quel format spécifié. +Vous pouvez l'utiliser pour plus de commodité, ou pour créer des vidages. +Pour plus d'informations, consultez la section “Formats”. +Si la clause FORMAT est omise, le format par défaut est utilisé, ce qui dépend à la fois des paramètres et de l'interface utilisée pour accéder à la base de données. Pour L'interface HTTP et le client de ligne de commande en mode batch, le format par défaut est TabSeparated. Pour le client de ligne de commande en mode interactif, le format par défaut est PrettyCompact (il a des tables attrayantes et compactes). + +Lors de l'utilisation du client de ligne de commande, les données sont transmises au client dans un format efficace interne. Le client interprète indépendamment la clause de FORMAT de la requête et formate les données elles-mêmes (soulageant ainsi le réseau et le serveur de la charge). + +### Dans les opérateurs {#select-in-operators} + +Le `IN`, `NOT IN`, `GLOBAL IN`, et `GLOBAL NOT IN` les opérateurs sont traitées séparément, car leur fonctionnalité est assez riche. + +Le côté gauche de l'opérateur, soit une seule colonne ou un tuple. + +Exemple: + +``` sql +SELECT UserID IN (123, 456) FROM ... +SELECT (CounterID, UserID) IN ((34, 123), (101500, 456)) FROM ... +``` + +Si le côté gauche est une colonne unique qui est dans l'index, et le côté droit est un ensemble de constantes, le système utilise l'index pour le traitement de la requête. + +Don't list too many values explicitly (i.e. millions). If a data set is large, put it in a temporary table (for example, see the section “External data for query processing”), puis utiliser une sous-requête. + +Le côté droit de l'opérateur peut être un ensemble d'expressions constantes, un ensemble de tuples avec des expressions constantes (illustrées dans les exemples ci-dessus), ou le nom d'une table de base de données ou une sous-requête SELECT entre parenthèses. + +Si le côté droit de l'opérateur est le nom d'une table (par exemple, `UserID IN users`), ceci est équivalent à la sous-requête `UserID IN (SELECT * FROM users)`. Utilisez ceci lorsque vous travaillez avec des données externes envoyées avec la requête. Par exemple, la requête peut être envoyée avec un ensemble d'ID utilisateur chargés dans le ‘users’ table temporaire, qui doit être filtrée. + +Si le côté droit de l'opérateur est un nom de table qui a le moteur Set (un ensemble de données préparé qui est toujours en RAM), l'ensemble de données ne sera pas créé à nouveau pour chaque requête. + +La sous-requête peut spécifier plusieurs colonnes pour filtrer les tuples. +Exemple: + +``` sql +SELECT (CounterID, UserID) IN (SELECT CounterID, UserID FROM ...) FROM ... +``` + +Les colonnes à gauche et à droite de l'opérateur doit avoir le même type. + +L'opérateur IN et la sous-requête peuvent se produire dans n'importe quelle partie de la requête, y compris dans les fonctions d'agrégation et les fonctions lambda. +Exemple: + +``` sql +SELECT + EventDate, + avg(UserID IN + ( + SELECT UserID + FROM test.hits + WHERE EventDate = toDate('2014-03-17') + )) AS ratio +FROM test.hits +GROUP BY EventDate +ORDER BY EventDate ASC +``` + +``` text +┌──EventDate─┬────ratio─┐ +│ 2014-03-17 │ 1 │ +│ 2014-03-18 │ 0.807696 │ +│ 2014-03-19 │ 0.755406 │ +│ 2014-03-20 │ 0.723218 │ +│ 2014-03-21 │ 0.697021 │ +│ 2014-03-22 │ 0.647851 │ +│ 2014-03-23 │ 0.648416 │ +└────────────┴──────────┘ +``` + +Pour chaque jour après le 17 mars, comptez le pourcentage de pages vues par les utilisateurs qui ont visité le site le 17 mars. +Une sous-requête dans la clause est toujours exécuter une seule fois sur un seul serveur. Il n'y a pas de sous-requêtes dépendantes. + +#### Le traitement NULL {#null-processing-1} + +Pendant le traitement de la demande, l'opérateur n'assume que le résultat d'une opération avec [NULL](syntax.md) est toujours égale à `0` indépendamment de savoir si `NULL` est sur le côté droit ou gauche de l'opérateur. `NULL` les valeurs ne sont incluses dans aucun jeu de données, ne correspondent pas entre elles et ne peuvent pas être comparées. + +Voici un exemple avec le `t_null` table: + +``` text +┌─x─┬────y─┐ +│ 1 │ ᴺᵁᴸᴸ │ +│ 2 │ 3 │ +└───┴──────┘ +``` + +L'exécution de la requête `SELECT x FROM t_null WHERE y IN (NULL,3)` vous donne le résultat suivant: + +``` text +┌─x─┐ +│ 2 │ +└───┘ +``` + +Vous pouvez voir que la ligne dans laquelle `y = NULL` est jeté hors de résultats de la requête. C'est parce que ClickHouse ne peut pas décider si `NULL` est inclus dans le `(NULL,3)` ensemble, les retours `0` comme le résultat de l'opération, et `SELECT` exclut cette ligne de la sortie finale. + +``` sql +SELECT y IN (NULL, 3) +FROM t_null +``` + +``` text +┌─in(y, tuple(NULL, 3))─┐ +│ 0 │ +│ 1 │ +└───────────────────────┘ +``` + +#### Sous-Requêtes Distribuées {#select-distributed-subqueries} + +Il y a deux options pour IN-S avec des sous-requêtes (similaires aux jointures): normal `IN` / `JOIN` et `GLOBAL IN` / `GLOBAL JOIN`. Ils diffèrent dans la façon dont ils sont exécutés pour le traitement des requêtes distribuées. + +!!! attention "Attention" + Rappelez-vous que les algorithmes décrits ci-dessous peuvent travailler différemment en fonction de la [paramètre](../operations/settings/settings.md) `distributed_product_mode` paramètre. + +Lors de l'utilisation de l'IN régulier, la requête est envoyée à des serveurs distants, et chacun d'eux exécute les sous-requêtes dans le `IN` ou `JOIN` clause. + +Lors de l'utilisation de `GLOBAL IN` / `GLOBAL JOINs`, d'abord toutes les sous-requêtes sont exécutées pour `GLOBAL IN` / `GLOBAL JOINs`, et les résultats sont recueillis dans des tableaux temporaires. Ensuite, les tables temporaires sont envoyés à chaque serveur distant, où les requêtes sont exécutées à l'aide temporaire de données. + +Pour une requête non distribuée, utilisez `IN` / `JOIN`. + +Soyez prudent lorsque vous utilisez des sous-requêtes dans le `IN` / `JOIN` clauses pour le traitement des requêtes distribuées. + +Regardons quelques exemples. Supposons que chaque serveur du cluster a un **local\_table**. Chaque serveur dispose également d'une **table distributed\_table** table avec le **Distribué** type, qui regarde tous les serveurs du cluster. + +Pour une requête à l' **table distributed\_table**, la requête sera envoyée à tous les serveurs distants et exécutée sur eux en utilisant le **local\_table**. + +Par exemple, la requête + +``` sql +SELECT uniq(UserID) FROM distributed_table +``` + +sera envoyé à tous les serveurs distants + +``` sql +SELECT uniq(UserID) FROM local_table +``` + +et l'exécuter sur chacun d'eux en parallèle, jusqu'à ce qu'il atteigne le stade où les résultats intermédiaires peuvent être combinés. Ensuite, les résultats intermédiaires seront retournés au demandeur de serveur et de fusion, et le résultat final sera envoyé au client. + +Examinons maintenant une requête avec IN: + +``` sql +SELECT uniq(UserID) FROM distributed_table WHERE CounterID = 101500 AND UserID IN (SELECT UserID FROM local_table WHERE CounterID = 34) +``` + +- Calcul de l'intersection des audiences de deux sites. + +Cette requête sera envoyée à tous les serveurs distants + +``` sql +SELECT uniq(UserID) FROM local_table WHERE CounterID = 101500 AND UserID IN (SELECT UserID FROM local_table WHERE CounterID = 34) +``` + +En d'autres termes, l'ensemble de données de la clause IN sera collecté sur chaque serveur indépendamment, uniquement à travers les données stockées localement sur chacun des serveurs. + +Cela fonctionnera correctement et de manière optimale si vous êtes prêt pour ce cas et que vous avez réparti les données entre les serveurs de cluster de telle sorte que les données d'un seul ID utilisateur résident entièrement sur un seul serveur. Dans ce cas, toutes les données nécessaires seront disponibles localement sur chaque serveur. Sinon, le résultat sera erroné. Nous nous référons à cette variation de la requête que “local IN”. + +Pour corriger le fonctionnement de la requête lorsque les données sont réparties aléatoirement sur les serveurs de cluster, vous pouvez spécifier **table distributed\_table** à l'intérieur d'une sous-requête. La requête ressemblerait à ceci: + +``` sql +SELECT uniq(UserID) FROM distributed_table WHERE CounterID = 101500 AND UserID IN (SELECT UserID FROM distributed_table WHERE CounterID = 34) +``` + +Cette requête sera envoyée à tous les serveurs distants + +``` sql +SELECT uniq(UserID) FROM local_table WHERE CounterID = 101500 AND UserID IN (SELECT UserID FROM distributed_table WHERE CounterID = 34) +``` + +La sous-requête commencera à s'exécuter sur chaque serveur distant. Étant donné que la sous-requête utilise une table distribuée, la sous-requête qui se trouve sur chaque serveur distant sera renvoyée à chaque serveur distant comme + +``` sql +SELECT UserID FROM local_table WHERE CounterID = 34 +``` + +Par exemple, si vous avez un cluster de 100 SERVEURS, l'exécution de la requête entière nécessitera 10 000 requêtes élémentaires, ce qui est généralement considéré comme inacceptable. + +Dans de tels cas, vous devez toujours utiliser GLOBAL IN au lieu de IN. Voyons comment cela fonctionne pour la requête + +``` sql +SELECT uniq(UserID) FROM distributed_table WHERE CounterID = 101500 AND UserID GLOBAL IN (SELECT UserID FROM distributed_table WHERE CounterID = 34) +``` + +Le serveur demandeur exécutera la sous requête + +``` sql +SELECT UserID FROM distributed_table WHERE CounterID = 34 +``` + +et le résultat sera mis dans une table temporaire en RAM. Ensuite, la demande sera envoyée à chaque serveur distant + +``` sql +SELECT uniq(UserID) FROM local_table WHERE CounterID = 101500 AND UserID GLOBAL IN _data1 +``` + +et la table temporaire `_data1` sera envoyé à chaque serveur distant avec la requête (le nom de la table temporaire est défini par l'implémentation). + +Ceci est plus optimal que d'utiliser la normale dans. Cependant, gardez les points suivants à l'esprit: + +1. Lors de la création d'une table temporaire, les données ne sont pas uniques. Pour réduire le volume de données transmises sur le réseau, spécifiez DISTINCT dans la sous-requête. (Vous n'avez pas besoin de le faire pour un IN normal.) +2. La table temporaire sera envoyé à tous les serveurs distants. La Transmission ne tient pas compte de la topologie du réseau. Par exemple, si 10 serveurs distants résident dans un centre de données très distant par rapport au serveur demandeur, les données seront envoyées 10 fois sur le canal au centre de données distant. Essayez d'éviter les grands ensembles de données lorsque vous utilisez GLOBAL IN. +3. Lors de la transmission de données à des serveurs distants, les restrictions sur la bande passante réseau ne sont pas configurables. Vous pourriez surcharger le réseau. +4. Essayez de distribuer les données entre les serveurs afin que vous n'ayez pas besoin D'utiliser GLOBAL IN sur une base régulière. +5. Si vous devez utiliser GLOBAL in souvent, planifiez l'emplacement du cluster ClickHouse de sorte qu'un seul groupe de répliques ne réside pas dans plus d'un centre de données avec un réseau rapide entre eux, de sorte qu'une requête puisse être traitée entièrement dans un seul centre de données. + +Il est également judicieux de spécifier une table locale dans le `GLOBAL IN` clause, dans le cas où cette table locale est uniquement disponible sur le serveur demandeur et que vous souhaitez utiliser les données de celui-ci sur des serveurs distants. + +### Les Valeurs Extrêmes {#extreme-values} + +En plus des résultats, vous pouvez également obtenir des valeurs minimales et maximales pour les colonnes de résultats. Pour ce faire, définissez la **extrême** réglage sur 1. Les Minimums et les maximums sont calculés pour les types numériques, les dates et les dates avec des heures. Pour les autres colonnes, les valeurs par défaut sont sorties. + +An extra two rows are calculated – the minimums and maximums, respectively. These extra two rows are output in `JSON*`, `TabSeparated*`, et `Pretty*` [format](../interfaces/formats.md), séparés des autres lignes. Ils ne sont pas Produits pour d'autres formats. + +Dans `JSON*` formats, les valeurs extrêmes sont sorties dans un ‘extremes’ champ. Dans `TabSeparated*` formats, la ligne vient après le résultat principal, et après ‘totals’ si elle est présente. Elle est précédée par une ligne vide (après les autres données). Dans `Pretty*` formats, la ligne est sortie comme une table séparée après le résultat principal, et après `totals` si elle est présente. + +Les valeurs extrêmes sont calculées pour les lignes avant `LIMIT` mais après `LIMIT BY`. Cependant, lors de l'utilisation de `LIMIT offset, size`, les lignes avant de les `offset` sont inclus dans `extremes`. Dans les requêtes de flux, le résultat peut également inclure un petit nombre de lignes qui ont traversé `LIMIT`. + +### Note {#notes} + +Le `GROUP BY` et `ORDER BY` les clauses ne supportent pas les arguments positionnels. Cela contredit MySQL, mais est conforme à SQL standard. +Exemple, `GROUP BY 1, 2` will be interpreted as grouping by constants (i.e. aggregation of all rows into one). + +Vous pouvez utiliser des synonymes (`AS` alias) dans n'importe quelle partie d'une requête. + +Vous pouvez mettre un astérisque dans quelque partie de la requête au lieu d'une expression. Lorsque la requête est analysée, l'astérisque est étendu à une liste de toutes les colonnes `MATERIALIZED` et `ALIAS` colonne). Il n'y a que quelques cas où l'utilisation d'un astérisque est justifiée: + +- Lors de la création d'un vidage de table. +- Pour les tables contenant seulement quelques colonnes, comme les tables système. +- Pour obtenir des informations sur ce que sont les colonnes dans une table. Dans ce cas, la valeur `LIMIT 1`. Mais il est préférable d'utiliser la `DESC TABLE` requête. +- Quand il y a une forte filtration sur un petit nombre de colonnes en utilisant `PREWHERE`. +- Dans les sous-requêtes (puisque les colonnes qui ne sont pas nécessaires pour la requête externe sont exclues des sous-requêtes). + +Dans tous les autres cas, nous ne recommandons pas d'utiliser l'astérisque, car il ne vous donne que les inconvénients d'un SGBD colonnaire au lieu des avantages. En d'autres termes, l'utilisation de l'astérisque n'est pas recommandée. + +[Article Original](https://clickhouse.tech/docs/en/query_language/select/) diff --git a/docs/fr/query_language/show.md b/docs/fr/query_language/show.md new file mode 100644 index 00000000000..1125dec2b53 --- /dev/null +++ b/docs/fr/query_language/show.md @@ -0,0 +1,102 @@ +--- +machine_translated: true +--- + +# Afficher les requêtes {#show-queries} + +## SHOW CREATE TABLE {#show-create-table} + +``` sql +SHOW CREATE [TEMPORARY] [TABLE|DICTIONARY] [db.]table [INTO OUTFILE filename] [FORMAT format] +``` + +Renvoie un seul `String`-type ‘statement’ column, which contains a single value – the `CREATE` requête utilisée pour créer l'objet spécifié. + +## SHOW DATABASES {#show-databases} + +``` sql +SHOW DATABASES [INTO OUTFILE filename] [FORMAT format] +``` + +Imprime une liste de toutes les bases de données. +Cette requête est identique à `SELECT name FROM system.databases [INTO OUTFILE filename] [FORMAT format]`. + +## SHOW PROCESSLIST {#show-processlist} + +``` sql +SHOW PROCESSLIST [INTO OUTFILE filename] [FORMAT format] +``` + +Sorties le contenu de la [système.processus](../operations/system_tables.md#system_tables-processes) table, qui contient une liste de requêtes en cours de traitement en ce moment, à l'exception `SHOW PROCESSLIST` requête. + +Le `SELECT * FROM system.processes` requête renvoie des données sur toutes les requêtes en cours. + +Astuce (exécuter dans la console): + +``` bash +$ watch -n1 "clickhouse-client --query='SHOW PROCESSLIST'" +``` + +## SHOW TABLES {#show-tables} + +Affiche une liste de tableaux. + +``` sql +SHOW [TEMPORARY] TABLES [{FROM | IN} ] [LIKE '' | WHERE expr] [LIMIT ] [INTO OUTFILE ] [FORMAT ] +``` + +Si l' `FROM` la clause n'est pas spécifié, la requête renvoie la liste des tables de la base de données actuelle. + +Vous pouvez obtenir les mêmes résultats que l' `SHOW TABLES` requête de la façon suivante: + +``` sql +SELECT name FROM system.tables WHERE database = [AND name LIKE ] [LIMIT ] [INTO OUTFILE ] [FORMAT ] +``` + +**Exemple** + +La requête suivante sélectionne les deux premières lignes de la liste des tables `system` base de données, dont les noms contiennent `co`. + +``` sql +SHOW TABLES FROM system LIKE '%co%' LIMIT 2 +``` + +``` text +┌─name───────────────────────────┐ +│ aggregate_function_combinators │ +│ collations │ +└────────────────────────────────┘ +``` + +## SHOW DICTIONARIES {#show-dictionaries} + +Affiche une liste de [dictionnaires externes](dicts/external_dicts.md). + +``` sql +SHOW DICTIONARIES [FROM ] [LIKE ''] [LIMIT ] [INTO OUTFILE ] [FORMAT ] +``` + +Si l' `FROM` la clause n'est pas spécifié, la requête retourne la liste des dictionnaires de la base de données actuelle. + +Vous pouvez obtenir les mêmes résultats que l' `SHOW DICTIONARIES` requête de la façon suivante: + +``` sql +SELECT name FROM system.dictionaries WHERE database = [AND name LIKE ] [LIMIT ] [INTO OUTFILE ] [FORMAT ] +``` + +**Exemple** + +La requête suivante sélectionne les deux premières lignes de la liste des tables `system` base de données, dont les noms contiennent `reg`. + +``` sql +SHOW DICTIONARIES FROM db LIKE '%reg%' LIMIT 2 +``` + +``` text +┌─name─────────┐ +│ regions │ +│ region_names │ +└──────────────┘ +``` + +[Article Original](https://clickhouse.tech/docs/en/query_language/show/) diff --git a/docs/fr/query_language/syntax.md b/docs/fr/query_language/syntax.md new file mode 100644 index 00000000000..416775e6e29 --- /dev/null +++ b/docs/fr/query_language/syntax.md @@ -0,0 +1,184 @@ +--- +machine_translated: true +--- + +# Syntaxe {#syntax} + +Il existe deux types d'analyseurs dans le système: L'analyseur SQL complet (un analyseur de descente récursif) et l'analyseur de format de données (un analyseur de flux rapide). +Dans tous les cas à l'exception de la `INSERT` requête, seul L'analyseur SQL complet est utilisé. +Le `INSERT` requête utilise les deux analyseurs: + +``` sql +INSERT INTO t VALUES (1, 'Hello, world'), (2, 'abc'), (3, 'def') +``` + +Le `INSERT INTO t VALUES` fragment est analysé par l'analyseur complet, et les données `(1, 'Hello, world'), (2, 'abc'), (3, 'def')` est analysé par l'analyseur de flux rapide. Vous pouvez également activer l'analyseur complet pour les données à l'aide de la [input\_format\_values\_interpret\_expressions](../operations/settings/settings.md#settings-input_format_values_interpret_expressions) paramètre. Lorsque `input_format_values_interpret_expressions = 1`, ClickHouse essaie d'abord d'analyser les valeurs avec l'analyseur de flux rapide. S'il échoue, ClickHouse essaie d'utiliser l'analyseur complet pour les données, en le traitant comme un SQL [expression](#syntax-expressions). + +Les données peuvent avoir n'importe quel format. Lorsqu'une requête est reçue, le serveur calcule pas plus que [max\_query\_size](../operations/settings/settings.md#settings-max_query_size) octets de la requête en RAM (par défaut, 1 Mo), et le reste est analysé en flux. +Cela signifie que le système n'a pas de problèmes avec de grandes `INSERT` requêtes, comme le fait MySQL. + +Lors de l'utilisation de la `Values` format dans un `INSERT` de la requête, il peut sembler que les données sont analysées de même que les expressions dans un `SELECT` requête, mais ce n'est pas vrai. Le `Values` le format est beaucoup plus limitée. + +Ensuite, nous allons couvrir l'analyseur complet. Pour plus d'informations sur les analyseurs de format, consultez [Format](../interfaces/formats.md) section. + +## Espace {#spaces} + +Il peut y avoir n'importe quel nombre de symboles d'espace entre les constructions syntaxiques (y compris le début et la fin d'une requête). Les symboles d'espace incluent l'espace, l'onglet, le saut de ligne, Le CR et le flux de formulaire. + +## Commentaire {#comments} + +Les commentaires de style SQL et C sont pris en charge. +Commentaires de style SQL: de `--` à la fin de la ligne. L'espace après `--` peut être omis. +Commentaires dans C-style: de `/*` de `*/`. Ces commentaires peuvent être multilignes. Les espaces ne sont pas requis ici non plus. + +## Mot {#syntax-keywords} + +Les mots clés sont insensibles à la casse lorsqu'ils correspondent à: + +- La norme SQL. Exemple, `SELECT`, `select` et `SeLeCt` sont toutes valides. +- Implémentation dans certains SGBD populaires (MySQL ou Postgres). Exemple, `DateTime` est la même que `datetime`. + +Si le nom du type de données est sensible à la casse peut être vérifié `system.data_type_families` table. + +Contrairement à SQL standard, tous les autres mots clés (y compris les noms de fonctions) sont **sensible à la casse**. + +Mots-clés ne sont pas réservés (ils sont simplement considérés comme des mots-clés dans le contexte correspondant). Si vous utilisez [identificateur](#syntax-identifiers) de même que les mots clés, les placer entre guillemets. Par exemple, la requête `SELECT "FROM" FROM table_name` est valide si la table `table_name` a colonne avec le nom de `"FROM"`. + +## Identificateur {#syntax-identifiers} + +Les identificateurs sont: + +- Noms de Cluster, de base de données, de table, de partition et de colonne. +- Fonction. +- Types de données. +- [Expression des alias](#syntax-expression_aliases). + +Les identificateurs peuvent être cités ou non cités. Il est recommandé d'utiliser des identificateurs sans guillemets. + +Non identificateurs doivent correspondre à l'expression régulière `^[a-zA-Z_][0-9a-zA-Z_]*$` et ne peut pas être égale à [mot](#syntax-keywords). Exemple: `x, _1, X_y__Z123_.` + +Si vous souhaitez utiliser les identifiants de la même manière que les mots-clés ou si vous souhaitez utiliser d'autres symboles dans les identifiants, citez-le en utilisant des guillemets doubles ou des backticks, par exemple, `"id"`, `` `id` ``. + +## Littéral {#literals} + +Il y a: Numérique, chaîne, composé et `NULL` littéral. + +### Numérique {#numeric} + +Un littéral numérique tente d'être analysé: + +- D'abord comme un nombre signé 64 bits, en utilisant le [strtoull](https://en.cppreference.com/w/cpp/string/byte/strtoul) fonction. +- En cas d'échec, en tant que nombre non signé 64 bits, [strtoll](https://en.cppreference.com/w/cpp/string/byte/strtol) fonction. +- En cas d'échec, en tant que nombre à virgule flottante [strtod](https://en.cppreference.com/w/cpp/string/byte/strtof) fonction. +- Sinon, une erreur est renvoyée. + +La valeur correspondante aura le plus petit type dans lequel la valeur correspond. +Par exemple, 1 est analysé comme `UInt8`, mais 256 est analysé comme `UInt16`. Pour plus d'informations, voir [Types de données](../data_types/index.md). + +Exemple: `1`, `18446744073709551615`, `0xDEADBEEF`, `01`, `0.1`, `1e100`, `-1e-100`, `inf`, `nan`. + +### Chaîne {#syntax-string-literal} + +Seuls les littéraux de chaîne entre guillemets simples sont pris en charge. Le clos de caractères barre oblique inverse échappé. Les séquences d'échappement suivantes ont une valeur spéciale correspondante: `\b`, `\f`, `\r`, `\n`, `\t`, `\0`, `\a`, `\v`, `\xHH`. Dans tous les autres cas, des séquences d'échappement au format `\c`, où `c` est un caractère, sont convertis à `c`. Cela signifie que vous pouvez utiliser les séquences `\'`et`\\`. La valeur aurez l' [Chaîne](../data_types/string.md) type. + +L'ensemble minimum de caractères que vous devez échapper dans les littéraux de chaîne: `'` et `\`. Apostrophe peut être échappé avec l'apostrophe, les littéraux `'It\'s'` et `'It''s'` sont égaux. + +### Composé {#compound} + +Les Constructions sont prises en charge pour les tableaux: `[1, 2, 3]` et les tuples: `(1, 'Hello, world!', 2)`.. +En fait, ce ne sont pas des littéraux, mais des expressions avec l'opérateur de création de tableau et l'opérateur de création de tuple, respectivement. +Un tableau doit être composé d'au moins un élément, et un tuple doit avoir au moins deux éléments. +Les Tuples ont un but spécial pour l'usage dans le `IN` clause de a `SELECT` requête. Les Tuples peuvent être obtenus à la suite d'une requête, mais ils ne peuvent pas être enregistrées dans une base de données (à l'exception de [Mémoire](../operations/table_engines/memory.md) table). + +### NULL {#null-literal} + +Indique que la valeur est manquante. + +Afin de stocker `NULL` dans un champ de table, il doit être de la [Nullable](../data_types/nullable.md) type. + +Selon le format de données (entrée ou sortie), `NULL` peut avoir une représentation différente. Pour plus d'informations, consultez la documentation de [formats de données](../interfaces/formats.md#formats). + +Il y a beaucoup de nuances au traitement `NULL`. Par exemple, si au moins l'un des arguments d'une opération de comparaison est `NULL` le résultat de cette opération sera également `NULL`. Il en va de même pour la multiplication, l'addition et d'autres opérations. Pour plus d'informations, lisez la documentation pour chaque opération. + +Dans les requêtes, vous pouvez vérifier `NULL` à l'aide de la [IS NULL](operators.md#operator-is-null) et [IS NOT NULL](operators.md) opérateurs et les fonctions connexes `isNull` et `isNotNull`. + +## Fonction {#functions} + +Les fonctions sont écrites comme un identifiant avec une liste d'arguments (éventuellement vide) entre parenthèses. Contrairement au SQL standard, les crochets sont requis, même pour une liste d'arguments vide. Exemple: `now()`. +Il existe des fonctions régulières et agrégées (voir la section “Aggregate functions”). Certaines fonctions d'agrégat peut contenir deux listes d'arguments entre parenthèses. Exemple: `quantile (0.9) (x)`. Ces fonctions d'agrégation sont appelés “parametric” fonctions, et les arguments dans la première liste sont appelés “parameters”. La syntaxe des fonctions d'agrégation sans paramètres est la même que pour les fonctions régulières. + +## Opérateur {#operators} + +Les opérateurs sont convertis en leurs fonctions correspondantes lors de l'analyse des requêtes, en tenant compte de leur priorité et de leur associativité. +Par exemple, l'expression `1 + 2 * 3 + 4` est transformé à `plus(plus(1, multiply(2, 3)), 4)`. + +## Types de données et moteurs de Table de base de données {#data_types-and-database-table-engines} + +Types de données et moteurs de table dans `CREATE` les requêtes sont écrites de la même manière que les identifiants ou les fonctions. En d'autres termes, ils peuvent ou non contenir une liste d'arguments entre parenthèses. Pour plus d'informations, voir les sections “Data types,” “Table engines,” et “CREATE”. + +## Expression Des Alias {#syntax-expression_aliases} + +Un alias est un nom défini par l'utilisateur pour une expression dans une requête. + +``` sql +expr AS alias +``` + +- `AS` — The keyword for defining aliases. You can define the alias for a table name or a column name in a `SELECT` clause sans utiliser le `AS` mot. + + For example, `SELECT table_name_alias.column_name FROM table_name table_name_alias`. + + In the [CAST](functions/type_conversion_functions.md#type_conversion_function-cast) function, the `AS` keyword has another meaning. See the description of the function. + +- `expr` — Any expression supported by ClickHouse. + + For example, `SELECT column_name * 2 AS double FROM some_table`. + +- `alias` — Name for `expr`. Les alias doivent être conformes à la [identificateur](#syntax-identifiers) syntaxe. + + For example, `SELECT "table t".column_name FROM table_name AS "table t"`. + +### Notes sur l'Utilisation de la {#notes-on-usage} + +Les alias sont globaux pour une requête ou d'une sous-requête et vous pouvez définir un alias dans n'importe quelle partie d'une requête de toute expression. Exemple, `SELECT (1 AS n) + 2, n`. + +Les alias ne sont pas visibles dans les sous-requêtes et entre les sous-requêtes. Par exemple, lors de l'exécution de la requête `SELECT (SELECT sum(b.a) + num FROM b) - a.a AS num FROM a` Clickhouse génère l'exception `Unknown identifier: num`. + +Si un alias est défini pour les colonnes de `SELECT` la clause d'une sous-requête, ces colonnes sont visibles dans la requête externe. Exemple, `SELECT n + m FROM (SELECT 1 AS n, 2 AS m)`. + +Soyez prudent avec les Alias qui sont les mêmes que les noms de colonnes ou de tables. Considérons l'exemple suivant: + +``` sql +CREATE TABLE t +( + a Int, + b Int +) +ENGINE = TinyLog() +``` + +``` sql +SELECT + argMax(a, b), + sum(b) AS b +FROM t +``` + +``` text +Received exception from server (version 18.14.17): +Code: 184. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Aggregate function sum(b) is found inside another aggregate function in query. +``` + +Dans cet exemple, nous avons déclaré table `t` avec la colonne `b`. Ensuite, lors de la sélection des données, nous avons défini le `sum(b) AS b` alias. Comme les alias sont globaux, ClickHouse a substitué le littéral `b` dans l'expression `argMax(a, b)` avec l'expression `sum(b)`. Cette substitution a provoqué l'exception. + +## Astérisque {#asterisk} + +Dans un `SELECT` requête, un astérisque peut remplacer l'expression. Pour plus d'informations, consultez la section “SELECT”. + +## Expression {#syntax-expressions} + +Une expression est une fonction, un identifiant, un littéral, une application d'un opérateur, une expression entre parenthèses, une sous-requête ou un astérisque. Il peut également contenir un alias. +Une liste des expressions est une ou plusieurs expressions séparées par des virgules. +Les fonctions et les opérateurs, à leur tour, peuvent avoir des expressions comme arguments. + +[Article Original](https://clickhouse.tech/docs/en/query_language/syntax/) diff --git a/docs/fr/query_language/system.md b/docs/fr/query_language/system.md new file mode 100644 index 00000000000..621287fb13f --- /dev/null +++ b/docs/fr/query_language/system.md @@ -0,0 +1,110 @@ +--- +machine_translated: true +--- + +# SYSTÈME de Requêtes {#query-language-system} + +- [RELOAD DICTIONARIES](#query_language-system-reload-dictionaries) +- [RELOAD DICTIONARY](#query_language-system-reload-dictionary) +- [DROP DNS CACHE](#query_language-system-drop-dns-cache) +- [DROP MARK CACHE](#query_language-system-drop-mark-cache) +- [FLUSH LOGS](#query_language-system-flush_logs) +- [RELOAD CONFIG](#query_language-system-reload-config) +- [SHUTDOWN](#query_language-system-shutdown) +- [KILL](#query_language-system-kill) +- [STOP DISTRIBUTED SENDS](#query_language-system-stop-distributed-sends) +- [FLUSH DISTRIBUTED](#query_language-system-flush-distributed) +- [START DISTRIBUTED SENDS](#query_language-system-start-distributed-sends) +- [STOP MERGES](#query_language-system-stop-merges) +- [START MERGES](#query_language-system-start-merges) + +## RELOAD DICTIONARIES {#query_language-system-reload-dictionaries} + +Recharge tous les dictionnaires qui ont déjà été chargés avec succès. +Par défaut, les dictionnaires sont chargés paresseusement (voir [dictionaries\_lazy\_load](../operations/server_settings/settings.md#server_settings-dictionaries_lazy_load)), donc au lieu d'être chargés automatiquement au démarrage, ils sont initialisés lors du premier accès via la fonction dictGet ou sélectionnez dans les tables avec ENGINE = Dictionary . Le `SYSTEM RELOAD DICTIONARIES` query recharge ces dictionnaires (chargés). +Retourne toujours `Ok.` quel que soit le résultat de la mise à jour du dictionnaire. + +## Recharger le dictionnaire dictionary\_name {#query_language-system-reload-dictionary} + +Recharge complètement un dictionnaire `dictionary_name`, quel que soit l'état du dictionnaire (LOADED / NOT\_LOADED / FAILED). +Retourne toujours `Ok.` quel que soit le résultat de la mise à jour du dictionnaire. +L'état du dictionnaire peut être vérifié en interrogeant le `system.dictionaries` table. + +``` sql +SELECT name, status FROM system.dictionaries; +``` + +## DROP DNS CACHE {#query_language-system-drop-dns-cache} + +Réinitialise le cache DNS interne de ClickHouse. Parfois (pour les anciennes versions de ClickHouse), il est nécessaire d'utiliser cette commande lors de la modification de l'infrastructure (modification de l'adresse IP d'un autre serveur ClickHouse ou du serveur utilisé par les dictionnaires). + +Pour une gestion du cache plus pratique (automatique), voir paramètres disable\_internal\_dns\_cache, dns\_cache\_update\_period. + +## DROP MARK CACHE {#query_language-system-drop-mark-cache} + +Réinitialise le cache de marque. Utilisé dans le développement de ClickHouse et des tests de performance. + +## FLUSH LOGS {#query_language-system-flush_logs} + +Flushes buffers of log messages to system tables (e.g. system.query\_log). Allows you to not wait 7.5 seconds when debugging. + +## RELOAD CONFIG {#query_language-system-reload-config} + +Recharge la configuration de ClickHouse. Utilisé lorsque la configuration est stockée dans ZooKeeeper. + +## SHUTDOWN {#query_language-system-shutdown} + +Normalement ferme ClickHouse (comme `service clickhouse-server stop` / `kill {$pid_clickhouse-server}`) + +## KILL {#query_language-system-kill} + +Annule le processus de ClickHouse (comme `kill -9 {$ pid_clickhouse-server}`) + +## Gestion Des Tables Distribuées {#query-language-system-distributed} + +ClickHouse peut gérer [distribué](../operations/table_engines/distributed.md) table. Lorsqu'un utilisateur insère des données dans ces tables, ClickHouse crée d'abord une file d'attente des données qui doivent être envoyées aux nœuds de cluster, puis l'envoie de manière asynchrone. Vous pouvez gérer le traitement des files d'attente avec [STOP DISTRIBUTED SENDS](#query_language-system-stop-distributed-sends), [FLUSH DISTRIBUTED](#query_language-system-flush-distributed), et [START DISTRIBUTED SENDS](#query_language-system-start-distributed-sends) requête. Vous pouvez également insérer de manière synchrone des données distribuées avec `insert_distributed_sync` paramètre. + +### STOP DISTRIBUTED SENDS {#query_language-system-stop-distributed-sends} + +Désactive la distribution de données en arrière-plan lors de l'insertion de données dans des tables distribuées. + +``` sql +SYSTEM STOP DISTRIBUTED SENDS [db.] +``` + +### FLUSH DISTRIBUTED {#query_language-system-flush-distributed} + +Force ClickHouse à envoyer des données aux nœuds de cluster de manière synchrone. Si des nœuds ne sont pas disponibles, ClickHouse lève une exception et arrête l'exécution de la requête. Vous pouvez réessayer la requête jusqu'à ce qu'elle réussisse, ce qui se produira lorsque tous les nœuds seront de nouveau en ligne. + +``` sql +SYSTEM FLUSH DISTRIBUTED [db.] +``` + +### START DISTRIBUTED SENDS {#query_language-system-start-distributed-sends} + +Active la distribution de données en arrière-plan lors de l'insertion de données dans des tables distribuées. + +``` sql +SYSTEM START DISTRIBUTED SENDS [db.] +``` + +### STOP MERGES {#query_language-system-stop-merges} + +Offre la possibilité d'arrêter les fusions d'arrière-plan pour les tables de la famille MergeTree: + +``` sql +SYSTEM STOP MERGES [[db.]merge_tree_family_table_name] +``` + +!!! note "Note" + `DETACH / ATTACH` table va commencer les fusions d'arrière-plan pour la table même dans le cas où les fusions ont été arrêtées pour toutes les tables MergeTree auparavant. + +### START MERGES {#query_language-system-start-merges} + +Offre la possibilité de démarrer des fusions en arrière-plan pour les tables de la famille MergeTree: + +``` sql +SYSTEM START MERGES [[db.]merge_tree_family_table_name] +``` + +[Article Original](https://clickhouse.tech/docs/en/query_language/system/) diff --git a/docs/fr/query_language/table_functions/file.md b/docs/fr/query_language/table_functions/file.md new file mode 100644 index 00000000000..1ea8fc7b531 --- /dev/null +++ b/docs/fr/query_language/table_functions/file.md @@ -0,0 +1,118 @@ +--- +machine_translated: true +--- + +# fichier {#file} + +Crée un tableau à partir d'un fichier. Cette fonction de table est similaire à [URL](url.md) et [hdfs](hdfs.md) ceux. + +``` sql +file(path, format, structure) +``` + +**Les paramètres d'entrée** + +- `path` — The relative path to the file from [user\_files\_path](../../operations/server_settings/settings.md#server_settings-user_files_path). Chemin d'accès à la prise en charge des fichiers suivant les globs en mode Lecture seule: `*`, `?`, `{abc,def}` et `{N..M}` où `N`, `M` — numbers, \``'abc', 'def'` — strings. +- `format` — The [format](../../interfaces/formats.md#formats) de le fichier. +- `structure` — Structure of the table. Format `'column1_name column1_type, column2_name column2_type, ...'`. + +**Valeur renvoyée** + +Une table avec la structure spécifiée pour lire ou écrire des données dans le fichier spécifié. + +**Exemple** + +Paramètre `user_files_path` et le contenu du fichier `test.csv`: + +``` bash +$ grep user_files_path /etc/clickhouse-server/config.xml + /var/lib/clickhouse/user_files/ + +$ cat /var/lib/clickhouse/user_files/test.csv + 1,2,3 + 3,2,1 + 78,43,45 +``` + +Table de`test.csv` et la sélection des deux premières lignes de ce: + +``` sql +SELECT * +FROM file('test.csv', 'CSV', 'column1 UInt32, column2 UInt32, column3 UInt32') +LIMIT 2 +``` + +``` text +┌─column1─┬─column2─┬─column3─┐ +│ 1 │ 2 │ 3 │ +│ 3 │ 2 │ 1 │ +└─────────┴─────────┴─────────┘ +``` + +``` sql +-- getting the first 10 lines of a table that contains 3 columns of UInt32 type from a CSV file +SELECT * FROM file('test.csv', 'CSV', 'column1 UInt32, column2 UInt32, column3 UInt32') LIMIT 10 +``` + +**Globs dans le chemin** + +Plusieurs composants de chemin peuvent avoir des globs. Pour être traité, le fichier doit exister et correspondre à l'ensemble du modèle de chemin (pas seulement le suffixe ou le préfixe). + +- `*` — Substitutes any number of any characters except `/` y compris la chaîne vide. +- `?` — Substitutes any single character. +- `{some_string,another_string,yet_another_one}` — Substitutes any of strings `'some_string', 'another_string', 'yet_another_one'`. +- `{N..M}` — Substitutes any number in range from N to M including both borders. + +Les Constructions avec `{}` sont similaires à l' [fonction de table à distance](../../query_language/table_functions/remote.md)). + +**Exemple** + +1. Supposons que nous ayons plusieurs fichiers avec les chemins relatifs suivants: + +- ‘some\_dir/some\_file\_1’ +- ‘some\_dir/some\_file\_2’ +- ‘some\_dir/some\_file\_3’ +- ‘another\_dir/some\_file\_1’ +- ‘another\_dir/some\_file\_2’ +- ‘another\_dir/some\_file\_3’ + +1. Interroger la quantité de lignes dans ces fichiers: + + + +``` sql +SELECT count(*) +FROM file('{some,another}_dir/some_file_{1..3}', 'TSV', 'name String, value UInt32') +``` + +1. Requête de la quantité de lignes dans tous les fichiers de ces deux répertoires: + + + +``` sql +SELECT count(*) +FROM file('{some,another}_dir/*', 'TSV', 'name String, value UInt32') +``` + +!!! warning "Avertissement" + Si votre liste de fichiers contient des plages de nombres avec des zéros en tête, utilisez la construction avec des accolades pour chaque chiffre séparément ou utilisez `?`. + +**Exemple** + +Interroger les données des fichiers nommés `file000`, `file001`, … , `file999`: + +``` sql +SELECT count(*) +FROM file('big_dir/file{0..9}{0..9}{0..9}', 'CSV', 'name String, value UInt32') +``` + +## Les Colonnes Virtuelles {#virtual-columns} + +- `_path` — Path to the file. +- `_file` — Name of the file. + +**Voir Aussi** + +- [Les colonnes virtuelles](https://clickhouse.tech/docs/en/operations/table_engines/#table_engines-virtual_columns) + +[Article Original](https://clickhouse.tech/docs/en/query_language/table_functions/file/) diff --git a/docs/fr/query_language/table_functions/generate.md b/docs/fr/query_language/table_functions/generate.md new file mode 100644 index 00000000000..a02ee1b9385 --- /dev/null +++ b/docs/fr/query_language/table_functions/generate.md @@ -0,0 +1,42 @@ +--- +machine_translated: true +--- + +# generateRandom {#generaterandom} + +Génère des données aléatoires avec un schéma donné. +Permet de remplir des tables de test avec des données. +Prend en charge tous les types de données qui peuvent être stockés dans la table sauf `LowCardinality` et `AggregateFunction`. + +``` sql +generateRandom('name TypeName[, name TypeName]...', [, 'random_seed'[, 'max_string_length'[, 'max_array_length']]]); +``` + +**Paramètre** + +- `name` — Name of corresponding column. +- `TypeName` — Type of corresponding column. +- `limit` — Number of rows to generate. +- `max_array_length` — Maximum array length for all generated arrays. Defaults to `10`. +- `max_string_length` — Maximum string length for all generated strings. Defaults to `10`. +- `random_seed` — Specify random seed manually to produce stable results. If NULL — seed is randomly generated. + +**Valeur Renvoyée** + +Un objet de table avec le schéma demandé. + +## Exemple D'Utilisation {#usage-example} + +``` sql +SELECT * FROM generateRandom('a Array(Int8), d Decimal32(4), c Tuple(DateTime64(3), UUID)', 1, 10, 2); +``` + +``` text +┌─a────────┬────────────d─┬─c──────────────────────────────────────────────────────────────────┐ +│ [77] │ -124167.6723 │ ('2061-04-17 21:59:44.573','3f72f405-ec3e-13c8-44ca-66ef335f7835') │ +│ [32,110] │ -141397.7312 │ ('1979-02-09 03:43:48.526','982486d1-5a5d-a308-e525-7bd8b80ffa73') │ +│ [68] │ -67417.0770 │ ('2080-03-12 14:17:31.269','110425e5-413f-10a6-05ba-fa6b3e929f15') │ +└──────────┴──────────────┴────────────────────────────────────────────────────────────────────┘ +``` + +[Article Original](https://clickhouse.tech/docs/en/query_language/table_functions/generate/) diff --git a/docs/fr/query_language/table_functions/hdfs.md b/docs/fr/query_language/table_functions/hdfs.md new file mode 100644 index 00000000000..d69206322d4 --- /dev/null +++ b/docs/fr/query_language/table_functions/hdfs.md @@ -0,0 +1,101 @@ +--- +machine_translated: true +--- + +# hdfs {#hdfs} + +Crée une table à partir de fichiers dans HDFS. Cette fonction de table est similaire à [URL](url.md) et [fichier](file.md) ceux. + +``` sql +hdfs(URI, format, structure) +``` + +**Les paramètres d'entrée** + +- `URI` — The relative URI to the file in HDFS. Path to file support following globs in readonly mode: `*`, `?`, `{abc,def}` et `{N..M}` où `N`, `M` — numbers, \``'abc', 'def'` — strings. +- `format` — The [format](../../interfaces/formats.md#formats) de le fichier. +- `structure` — Structure of the table. Format `'column1_name column1_type, column2_name column2_type, ...'`. + +**Valeur renvoyée** + +Une table avec la structure spécifiée pour lire ou écrire des données dans le fichier spécifié. + +**Exemple** + +Table de `hdfs://hdfs1:9000/test` et la sélection des deux premières lignes de ce: + +``` sql +SELECT * +FROM hdfs('hdfs://hdfs1:9000/test', 'TSV', 'column1 UInt32, column2 UInt32, column3 UInt32') +LIMIT 2 +``` + +``` text +┌─column1─┬─column2─┬─column3─┐ +│ 1 │ 2 │ 3 │ +│ 3 │ 2 │ 1 │ +└─────────┴─────────┴─────────┘ +``` + +**Globs dans le chemin** + +Plusieurs composants de chemin peuvent avoir des globs. Pour être traité, le fichier doit exister et correspondre à l'ensemble du modèle de chemin (pas seulement le suffixe ou le préfixe). + +- `*` — Substitutes any number of any characters except `/` y compris la chaîne vide. +- `?` — Substitutes any single character. +- `{some_string,another_string,yet_another_one}` — Substitutes any of strings `'some_string', 'another_string', 'yet_another_one'`. +- `{N..M}` — Substitutes any number in range from N to M including both borders. + +Les Constructions avec `{}` sont similaires à l' [fonction de table à distance](../../query_language/table_functions/remote.md)). + +**Exemple** + +1. Supposons que nous ayons plusieurs fichiers avec les URI suivants sur HDFS: + +- ‘hdfs://hdfs1:9000/some\_dir/some\_file\_1’ +- ‘hdfs://hdfs1:9000/some\_dir/some\_file\_2’ +- ‘hdfs://hdfs1:9000/some\_dir/some\_file\_3’ +- ‘hdfs://hdfs1:9000/another\_dir/some\_file\_1’ +- ‘hdfs://hdfs1:9000/another\_dir/some\_file\_2’ +- ‘hdfs://hdfs1:9000/another\_dir/some\_file\_3’ + +1. Interroger la quantité de lignes dans ces fichiers: + + + +``` sql +SELECT count(*) +FROM hdfs('hdfs://hdfs1:9000/{some,another}_dir/some_file_{1..3}', 'TSV', 'name String, value UInt32') +``` + +1. Requête de la quantité de lignes dans tous les fichiers de ces deux répertoires: + + + +``` sql +SELECT count(*) +FROM hdfs('hdfs://hdfs1:9000/{some,another}_dir/*', 'TSV', 'name String, value UInt32') +``` + +!!! warning "Avertissement" + Si votre liste de fichiers contient des plages de nombres avec des zéros en tête, utilisez la construction avec des accolades pour chaque chiffre séparément ou utilisez `?`. + +**Exemple** + +Interroger les données des fichiers nommés `file000`, `file001`, … , `file999`: + +``` sql +SELECT count(*) +FROM hdfs('hdfs://hdfs1:9000/big_dir/file{0..9}{0..9}{0..9}', 'CSV', 'name String, value UInt32') +``` + +## Les Colonnes Virtuelles {#virtual-columns} + +- `_path` — Path to the file. +- `_file` — Name of the file. + +**Voir Aussi** + +- [Les colonnes virtuelles](https://clickhouse.tech/docs/en/operations/table_engines/#table_engines-virtual_columns) + +[Article Original](https://clickhouse.tech/docs/en/query_language/table_functions/hdfs/) diff --git a/docs/fr/query_language/table_functions/index.md b/docs/fr/query_language/table_functions/index.md new file mode 100644 index 00000000000..fc227e2c18a --- /dev/null +++ b/docs/fr/query_language/table_functions/index.md @@ -0,0 +1,34 @@ +--- +machine_translated: true +--- + +# Les Fonctions De Table {#table-functions} + +Les fonctions de Table sont des méthodes pour construire des tables. + +Vous pouvez utiliser les fonctions de table dans: + +- [FROM](../select.md#select-from) la clause de la `SELECT` requête. + + The method for creating a temporary table that is available only in the current query. The table is deleted when the query finishes. + +- [Créer une TABLE en tant que \< table\_function ()\>](../create.md#create-table-query) requête. + + It's one of the methods of creating a table. + +!!! warning "Avertissement" + Vous ne pouvez pas utiliser les fonctions de table si [allow\_ddl](../../operations/settings/permissions_for_queries.md#settings_allow_ddl) paramètre est désactivé. + +| Fonction | Description | +|-----------------------|--------------------------------------------------------------------------------------------------------------------------------| +| [fichier](file.md) | Crée un [Fichier](../../operations/table_engines/file.md)-moteur de table. | +| [fusionner](merge.md) | Crée un [Fusionner](../../operations/table_engines/merge.md)-moteur de table. | +| [nombre](numbers.md) | Crée une table avec une seule colonne remplie de nombres entiers. | +| [distant](remote.md) | Vous permet d'accéder à des serveurs distants sans [Distribué](../../operations/table_engines/distributed.md)-moteur de table. | +| [URL](url.md) | Crée un [URL](../../operations/table_engines/url.md)-moteur de table. | +| [mysql](mysql.md) | Crée un [MySQL](../../operations/table_engines/mysql.md)-moteur de table. | +| [jdbc](jdbc.md) | Crée un [JDBC](../../operations/table_engines/jdbc.md)-moteur de table. | +| [ODBC](odbc.md) | Crée un [ODBC](../../operations/table_engines/odbc.md)-moteur de table. | +| [hdfs](hdfs.md) | Crée un [HDFS](../../operations/table_engines/hdfs.md)-moteur de table. | + +[Article Original](https://clickhouse.tech/docs/en/query_language/table_functions/) diff --git a/docs/fr/query_language/table_functions/input.md b/docs/fr/query_language/table_functions/input.md new file mode 100644 index 00000000000..5f717431c6a --- /dev/null +++ b/docs/fr/query_language/table_functions/input.md @@ -0,0 +1,44 @@ +--- +machine_translated: true +--- + +# entrée {#input} + +`input(structure)` - fonction de table qui permet effectivement convertir et insérer des données envoyées à la +serveur avec une structure donnée à la table avec une autre structure. + +`structure` - structure de données envoyées au serveur dans le format suivant `'column1_name column1_type, column2_name column2_type, ...'`. +Exemple, `'id UInt32, name String'`. + +Cette fonction peut être utilisée uniquement dans `INSERT SELECT` requête et une seule fois mais se comporte autrement comme une fonction de table ordinaire +(par exemple, il peut être utilisé dans la sous-requête, etc.). + +Les données peuvent être envoyées de quelque manière que ce soit comme pour ordinaire `INSERT` requête et passé dans tout disponible [format](../../interfaces/formats.md#formats) +qui doit être spécifié à la fin de la requête (contrairement à l'ordinaire `INSERT SELECT`). + +La caractéristique principale de cette fonction est que lorsque le serveur reçoit des données du client il les convertit simultanément +selon la liste des expressions dans le `SELECT` clause et insère dans la table cible. Table temporaire +avec toutes les données transférées n'est pas créé. + +**Exemple** + +- Laissez le `test` le tableau a la structure suivante `(a String, b String)` + et les données `data.csv` a une structure différente `(col1 String, col2 Date, col3 Int32)`. Requête pour insérer + les données de l' `data.csv` dans le `test` table avec conversion simultanée ressemble à ceci: + + + +``` bash +$ cat data.csv | clickhouse-client --query="INSERT INTO test SELECT lower(col1), col3 * col3 FROM input('col1 String, col2 Date, col3 Int32') FORMAT CSV"; +``` + +- Si `data.csv` contient les données de la même structure `test_structure` comme la table `test` puis ces deux requêtes sont égales: + + + +``` bash +$ cat data.csv | clickhouse-client --query="INSERT INTO test FORMAT CSV" +$ cat data.csv | clickhouse-client --query="INSERT INTO test SELECT * FROM input('test_structure') FORMAT CSV" +``` + +[Article Original](https://clickhouse.tech/docs/en/query_language/table_functions/input/) diff --git a/docs/fr/query_language/table_functions/jdbc.md b/docs/fr/query_language/table_functions/jdbc.md new file mode 100644 index 00000000000..20f70e53c7c --- /dev/null +++ b/docs/fr/query_language/table_functions/jdbc.md @@ -0,0 +1,26 @@ +--- +machine_translated: true +--- + +# jdbc {#table-function-jdbc} + +`jdbc(jdbc_connection_uri, schema, table)` - retourne la table qui est connectée via le pilote JDBC. + +Ce tableau fonction nécessite séparé `clickhouse-jdbc-bridge` programme en cours d'exécution. +Il prend en charge les types Nullable (basé sur DDL de la table distante qui est interrogée). + +**Exemple** + +``` sql +SELECT * FROM jdbc('jdbc:mysql://localhost:3306/?user=root&password=root', 'schema', 'table') +``` + +``` sql +SELECT * FROM jdbc('mysql://localhost:3306/?user=root&password=root', 'schema', 'table') +``` + +``` sql +SELECT * FROM jdbc('datasource://mysql-local', 'schema', 'table') +``` + +[Article Original](https://clickhouse.tech/docs/en/query_language/table_functions/jdbc/) diff --git a/docs/fr/query_language/table_functions/merge.md b/docs/fr/query_language/table_functions/merge.md new file mode 100644 index 00000000000..23759fae9f1 --- /dev/null +++ b/docs/fr/query_language/table_functions/merge.md @@ -0,0 +1,11 @@ +--- +machine_translated: true +--- + +# fusionner {#merge} + +`merge(db_name, 'tables_regexp')` – Creates a temporary Merge table. For more information, see the section “Table engines, Merge”. + +La structure de la table est tirée de la première table rencontrée qui correspond à l'expression régulière. + +[Article Original](https://clickhouse.tech/docs/en/query_language/table_functions/merge/) diff --git a/docs/fr/query_language/table_functions/mysql.md b/docs/fr/query_language/table_functions/mysql.md new file mode 100644 index 00000000000..465fd1da1f6 --- /dev/null +++ b/docs/fr/query_language/table_functions/mysql.md @@ -0,0 +1,83 @@ +--- +machine_translated: true +--- + +# mysql {#mysql} + +Permettre `SELECT` requêtes à effectuer sur des données stockées sur un serveur MySQL distant. + +``` sql +mysql('host:port', 'database', 'table', 'user', 'password'[, replace_query, 'on_duplicate_clause']); +``` + +**Paramètre** + +- `host:port` — MySQL server address. + +- `database` — Remote database name. + +- `table` — Remote table name. + +- `user` — MySQL user. + +- `password` — User password. + +- `replace_query` — Flag that converts `INSERT INTO` les requêtes de `REPLACE INTO`. Si `replace_query=1` la requête est remplacé. + +- `on_duplicate_clause` — The `ON DUPLICATE KEY on_duplicate_clause` expression qui est ajoutée à la `INSERT` requête. + + Example: `INSERT INTO t (c1,c2) VALUES ('a', 2) ON DUPLICATE KEY UPDATE c2 = c2 + 1`, where `on_duplicate_clause` is `UPDATE c2 = c2 + 1`. See the MySQL documentation to find which `on_duplicate_clause` you can use with the `ON DUPLICATE KEY` clause. + + To specify `on_duplicate_clause` you need to pass `0` to the `replace_query` parameter. If you simultaneously pass `replace_query = 1` and `on_duplicate_clause`, ClickHouse generates an exception. + +Simple `WHERE` des clauses telles que `=, !=, >, >=, <, <=` sont actuellement exécutés sur le serveur MySQL. + +Le reste des conditions et le `LIMIT` les contraintes d'échantillonnage sont exécutées dans ClickHouse uniquement après la fin de la requête à MySQL. + +**Valeur Renvoyée** + +Un objet table avec les mêmes colonnes que la table MySQL d'origine. + +## Exemple D'Utilisation {#usage-example} + +Table dans MySQL: + +``` text +mysql> CREATE TABLE `test`.`test` ( + -> `int_id` INT NOT NULL AUTO_INCREMENT, + -> `int_nullable` INT NULL DEFAULT NULL, + -> `float` FLOAT NOT NULL, + -> `float_nullable` FLOAT NULL DEFAULT NULL, + -> PRIMARY KEY (`int_id`)); +Query OK, 0 rows affected (0,09 sec) + +mysql> insert into test (`int_id`, `float`) VALUES (1,2); +Query OK, 1 row affected (0,00 sec) + +mysql> select * from test; ++--------+--------------+-------+----------------+ +| int_id | int_nullable | float | float_nullable | ++--------+--------------+-------+----------------+ +| 1 | NULL | 2 | NULL | ++--------+--------------+-------+----------------+ +1 row in set (0,00 sec) +``` + +Sélection des données de ClickHouse: + +``` sql +SELECT * FROM mysql('localhost:3306', 'test', 'test', 'bayonet', '123') +``` + +``` text +┌─int_id─┬─int_nullable─┬─float─┬─float_nullable─┐ +│ 1 │ ᴺᵁᴸᴸ │ 2 │ ᴺᵁᴸᴸ │ +└────────┴──────────────┴───────┴────────────────┘ +``` + +## Voir Aussi {#see-also} + +- [Le ‘MySQL’ tableau moteur](../../operations/table_engines/mysql.md) +- [Utilisation de MySQL comme source de dictionnaire externe](../dicts/external_dicts_dict_sources.md#dicts-external_dicts_dict_sources-mysql) + +[Article Original](https://clickhouse.tech/docs/en/query_language/table_functions/mysql/) diff --git a/docs/fr/query_language/table_functions/numbers.md b/docs/fr/query_language/table_functions/numbers.md new file mode 100644 index 00000000000..663b481cb3d --- /dev/null +++ b/docs/fr/query_language/table_functions/numbers.md @@ -0,0 +1,27 @@ +--- +machine_translated: true +--- + +# nombre {#numbers} + +`numbers(N)` – Returns a table with the single ‘number’ colonne (UInt64) qui contient des entiers de 0 à n-1. +`numbers(N, M)` - Retourne un tableau avec le seul ‘number’ colonne (UInt64) qui contient des entiers de N À (N + M-1). + +Similaire à la `system.numbers` table, il peut être utilisé pour tester et générer des valeurs successives, `numbers(N, M)` plus efficace que `system.numbers`. + +Les requêtes suivantes sont équivalentes: + +``` sql +SELECT * FROM numbers(10); +SELECT * FROM numbers(0, 10); +SELECT * FROM system.numbers LIMIT 10; +``` + +Exemple: + +``` sql +-- Generate a sequence of dates from 2010-01-01 to 2010-12-31 +select toDate('2010-01-01') + number as d FROM numbers(365); +``` + +[Article Original](https://clickhouse.tech/docs/en/query_language/table_functions/numbers/) diff --git a/docs/fr/query_language/table_functions/odbc.md b/docs/fr/query_language/table_functions/odbc.md new file mode 100644 index 00000000000..741ec92c951 --- /dev/null +++ b/docs/fr/query_language/table_functions/odbc.md @@ -0,0 +1,105 @@ +--- +machine_translated: true +--- + +# ODBC {#table-functions-odbc} + +Renvoie la table connectée via [ODBC](https://en.wikipedia.org/wiki/Open_Database_Connectivity). + +``` sql +odbc(connection_settings, external_database, external_table) +``` + +Paramètre: + +- `connection_settings` — Name of the section with connection settings in the `odbc.ini` fichier. +- `external_database` — Name of a database in an external DBMS. +- `external_table` — Name of a table in the `external_database`. + +Pour implémenter en toute sécurité les connexions ODBC, ClickHouse utilise un programme distinct `clickhouse-odbc-bridge`. Si le pilote ODBC est chargé directement depuis `clickhouse-server`, les problèmes de pilote peuvent planter le serveur ClickHouse. Clickhouse démarre automatiquement `clickhouse-odbc-bridge` lorsque cela est nécessaire. Le programme ODBC bridge est installé à partir du même package que `clickhouse-server`. + +Les champs avec l' `NULL` les valeurs de la table externe sont converties en valeurs par défaut pour le type de données de base. Par exemple, si un champ de table MySQL distant a `INT NULL` type il est converti en 0 (la valeur par défaut pour ClickHouse `Int32` type de données). + +## Exemple d'utilisation {#usage-example} + +**Obtenir des données de L'installation MySQL locale via ODBC** + +Cet exemple est vérifié pour Ubuntu Linux 18.04 et MySQL server 5.7. + +Assurez-vous que unixODBC et MySQL Connector sont installés. + +Par défaut (si installé à partir de paquets), ClickHouse démarre en tant qu'utilisateur `clickhouse`. Ainsi, vous devez créer et configurer cet utilisateur dans le serveur MySQL. + +``` bash +$ sudo mysql +``` + +``` sql +mysql> CREATE USER 'clickhouse'@'localhost' IDENTIFIED BY 'clickhouse'; +mysql> GRANT ALL PRIVILEGES ON *.* TO 'clickhouse'@'clickhouse' WITH GRANT OPTION; +``` + +Puis configurez la connexion dans `/etc/odbc.ini`. + +``` bash +$ cat /etc/odbc.ini +[mysqlconn] +DRIVER = /usr/local/lib/libmyodbc5w.so +SERVER = 127.0.0.1 +PORT = 3306 +DATABASE = test +USERNAME = clickhouse +PASSWORD = clickhouse +``` + +Vous pouvez vérifier la connexion en utilisant le `isql` utilitaire de l'installation unixODBC. + +``` bash +$ isql -v mysqlconn ++---------------------------------------+ +| Connected! | +| | +... +``` + +Table dans MySQL: + +``` text +mysql> CREATE TABLE `test`.`test` ( + -> `int_id` INT NOT NULL AUTO_INCREMENT, + -> `int_nullable` INT NULL DEFAULT NULL, + -> `float` FLOAT NOT NULL, + -> `float_nullable` FLOAT NULL DEFAULT NULL, + -> PRIMARY KEY (`int_id`)); +Query OK, 0 rows affected (0,09 sec) + +mysql> insert into test (`int_id`, `float`) VALUES (1,2); +Query OK, 1 row affected (0,00 sec) + +mysql> select * from test; ++--------+--------------+-------+----------------+ +| int_id | int_nullable | float | float_nullable | ++--------+--------------+-------+----------------+ +| 1 | NULL | 2 | NULL | ++--------+--------------+-------+----------------+ +1 row in set (0,00 sec) +``` + +Récupération des données de la table MySQL dans ClickHouse: + +``` sql +SELECT * FROM odbc('DSN=mysqlconn', 'test', 'test') +``` + +``` text +┌─int_id─┬─int_nullable─┬─float─┬─float_nullable─┐ +│ 1 │ 0 │ 2 │ 0 │ +└────────┴──────────────┴───────┴────────────────┘ +``` + +## Voir Aussi {#see-also} + +- [Dictionnaires externes ODBC](../../query_language/dicts/external_dicts_dict_sources.md#dicts-external_dicts_dict_sources-odbc) +- [Moteur de table ODBC](../../operations/table_engines/odbc.md). + +[Article Original](https://clickhouse.tech/docs/en/query_language/table_functions/jdbc/) diff --git a/docs/fr/query_language/table_functions/remote.md b/docs/fr/query_language/table_functions/remote.md new file mode 100644 index 00000000000..c9dac905c16 --- /dev/null +++ b/docs/fr/query_language/table_functions/remote.md @@ -0,0 +1,80 @@ +--- +machine_translated: true +--- + +# à distance, remoteSecure {#remote-remotesecure} + +Vous permet d'accéder à des serveurs distants sans `Distributed` table. + +Signature: + +``` sql +remote('addresses_expr', db, table[, 'user'[, 'password']]) +remote('addresses_expr', db.table[, 'user'[, 'password']]) +``` + +`addresses_expr` – An expression that generates addresses of remote servers. This may be just one server address. The server address is `host:port` ou juste `host`. L'hôte peut être spécifié comme nom de serveur ou l'adresse IPv4 ou IPv6. Une adresse IPv6 est indiquée entre crochets. Le port est le port TCP sur le serveur distant. Si le port est omis, il utilise `tcp_port` à partir du fichier de configuration du serveur (par défaut, 9000). + +!!! important "Important" + Le port est requis pour une adresse IPv6. + +Exemple: + +``` text +example01-01-1 +example01-01-1:9000 +localhost +127.0.0.1 +[::]:9000 +[2a02:6b8:0:1111::11]:9000 +``` + +Plusieurs adresses séparées par des virgules. Dans ce cas, ClickHouse utilisera le traitement distribué, donc il enverra la requête à toutes les adresses spécifiées (comme les fragments avec des données différentes). + +Exemple: + +``` text +example01-01-1,example01-02-1 +``` + +Une partie de l'expression peut être spécifiée entre crochets. L'exemple précédent peut être écrite comme suit: + +``` text +example01-0{1,2}-1 +``` + +Les accolades peuvent contenir une plage de Nombres séparés par deux points (entiers non négatifs). Dans ce cas, la gamme est étendue à un ensemble de valeurs qui génèrent fragment d'adresses. Si le premier nombre commence par zéro, les valeurs sont formées avec le même alignement zéro. L'exemple précédent peut être écrite comme suit: + +``` text +example01-{01..02}-1 +``` + +Si vous avez plusieurs paires d'accolades, il génère le produit direct des ensembles correspondants. + +Les adresses et les parties d'adresses entre crochets peuvent être séparées par le symbole de tuyau (\|). Dans ce cas, les ensembles correspondants de adresses sont interprétés comme des répliques, et la requête sera envoyée à la première sain réplique. Cependant, les répliques sont itérées dans l'ordre actuellement défini dans [équilibrage](../../operations/settings/settings.md) paramètre. + +Exemple: + +``` text +example01-{01..02}-{1|2} +``` + +Cet exemple spécifie deux fragments qui ont chacun deux répliques. + +Le nombre d'adresses générées est limitée par une constante. En ce moment, c'est 1000 adresses. + +À l'aide de la `remote` la fonction de table est moins optimale que la création d'un `Distributed` table, car dans ce cas, la connexion au serveur est rétablie pour chaque requête. En outre, si des noms d'hôte, les noms sont résolus, et les erreurs ne sont pas comptés lors de travail avec diverses répliques. Lors du traitement d'un grand nombre de requêtes, créez toujours `Distributed` table à l'avance, et ne pas utiliser la `remote` table de fonction. + +Le `remote` table de fonction peut être utile dans les cas suivants: + +- Accès à un serveur spécifique pour la comparaison de données, le débogage et les tests. +- Requêtes entre différents clusters ClickHouse à des fins de recherche. +- Demandes distribuées peu fréquentes qui sont faites manuellement. +- Distribué demandes où l'ensemble des serveurs est redéfinie à chaque fois. + +Si l'utilisateur n'est pas spécifié, `default` est utilisée. +Si le mot de passe n'est spécifié, un mot de passe vide est utilisé. + +`remoteSecure` - la même chose que `remote` but with secured connection. Default port — [tcp\_port\_secure](../../operations/server_settings/settings.md#server_settings-tcp_port_secure) de config ou 9440. + +[Article Original](https://clickhouse.tech/docs/en/query_language/table_functions/remote/) diff --git a/docs/fr/query_language/table_functions/url.md b/docs/fr/query_language/table_functions/url.md new file mode 100644 index 00000000000..7b7795eef79 --- /dev/null +++ b/docs/fr/query_language/table_functions/url.md @@ -0,0 +1,23 @@ +--- +machine_translated: true +--- + +# URL {#url} + +`url(URL, format, structure)` - retourne une table créée à partir du `URL` avec le +`format` et `structure`. + +URL-adresse du serveur HTTP ou HTTPS, qui peut accepter `GET` et/ou `POST` demande. + +format - [format](../../interfaces/formats.md#formats) des données. + +structure - structure de table dans `'UserID UInt64, Name String'` format. Détermine les noms et les types de colonnes. + +**Exemple** + +``` sql +-- getting the first 3 lines of a table that contains columns of String and UInt32 type from HTTP-server which answers in CSV format. +SELECT * FROM url('http://127.0.0.1:12345/', CSV, 'column1 String, column2 UInt32') LIMIT 3 +``` + +[Article Original](https://clickhouse.tech/docs/en/query_language/table_functions/url/) diff --git a/docs/fr/roadmap.md b/docs/fr/roadmap.md new file mode 100644 index 00000000000..c0b2e685679 --- /dev/null +++ b/docs/fr/roadmap.md @@ -0,0 +1,16 @@ +--- +machine_translated: true +--- + +# Feuille de route {#roadmap} + +## Q1 2020 {#q1-2020} + +- Contrôle d'accès par rôle + +## Q2 2020 {#q2-2020} + +- Intégration avec les services d'authentification externes +- Pools de ressources pour une répartition plus précise de la capacité du cluster entre les utilisateurs + +{## [Article Original](https://clickhouse.tech/docs/en/roadmap/) ##} diff --git a/docs/fr/security_changelog.md b/docs/fr/security_changelog.md new file mode 100644 index 00000000000..0b37478e9aa --- /dev/null +++ b/docs/fr/security_changelog.md @@ -0,0 +1,73 @@ +--- +machine_translated: true +--- + +## Correction dans la version 19.14.3.3 de ClickHouse, 2019-09-10 {#fixed-in-clickhouse-release-19-14-3-3-2019-09-10} + +### CVE-2019-15024 {#cve-2019-15024} + +Аn attacker that has write access to ZooKeeper and who ican run a custom server available from the network where ClickHouse runs, can create a custom-built malicious server that will act as a ClickHouse replica and register it in ZooKeeper. When another replica will fetch data part from the malicious replica, it can force clickhouse-server to write to arbitrary path on filesystem. + +Crédits: Eldar Zaitov de L'équipe de sécurité de L'Information Yandex + +### CVE-2019-16535 {#cve-2019-16535} + +Аn OOB read, OOB write and integer underflow in decompression algorithms can be used to achieve RCE or DoS via native protocol. + +Crédits: Eldar Zaitov de L'équipe de sécurité de L'Information Yandex + +### CVE-2019-16536 {#cve-2019-16536} + +Le débordement de pile menant à DoS peut être déclenché par un client authentifié malveillant. + +Crédits: Eldar Zaitov de L'équipe de sécurité de L'Information Yandex + +## Correction de la version 19.13.6.1 de ClickHouse, 2019-09-20 {#fixed-in-clickhouse-release-19-13-6-1-2019-09-20} + +### CVE-2019-18657 {#cve-2019-18657} + +Fonction de Table `url` la vulnérabilité avait-elle permis à l'attaquant d'injecter des en-têtes HTTP arbitraires dans la requête. + +Crédit: [Nikita Tikhomirov](https://github.com/NSTikhomirov) + +## Correction dans la version ClickHouse 18.12.13, 2018-09-10 {#fixed-in-clickhouse-release-18-12-13-2018-09-10} + +### CVE-2018-14672 {#cve-2018-14672} + +Les fonctions de chargement des modèles CatBoost permettaient de parcourir les chemins et de lire des fichiers arbitraires via des messages d'erreur. + +Crédits: Andrey Krasichkov de L'équipe de sécurité de L'Information Yandex + +## Correction dans la version 18.10.3 de ClickHouse, 2018-08-13 {#fixed-in-clickhouse-release-18-10-3-2018-08-13} + +### CVE-2018-14671 {#cve-2018-14671} + +unixODBC a permis de charger des objets partagés arbitraires à partir du système de fichiers, ce qui a conduit à une vulnérabilité D'exécution de Code À Distance. + +Crédits: Andrey Krasichkov et Evgeny Sidorov de Yandex Information Security Team + +## Correction dans la version 1.1.54388 de ClickHouse, 2018-06-28 {#fixed-in-clickhouse-release-1-1-54388-2018-06-28} + +### CVE-2018-14668 {#cve-2018-14668} + +“remote” la fonction de table a permis des symboles arbitraires dans “user”, “password” et “default\_database” champs qui ont conduit à des attaques de falsification de requêtes inter-protocoles. + +Crédits: Andrey Krasichkov de L'équipe de sécurité de L'Information Yandex + +## Correction dans la version 1.1.54390 de ClickHouse, 2018-07-06 {#fixed-in-clickhouse-release-1-1-54390-2018-07-06} + +### CVE-2018-14669 {#cve-2018-14669} + +Clickhouse client MySQL avait “LOAD DATA LOCAL INFILE” fonctionnalité activée permettant à une base de données MySQL malveillante de lire des fichiers arbitraires à partir du serveur clickhouse connecté. + +Crédits: Andrey Krasichkov et Evgeny Sidorov de Yandex Information Security Team + +## Correction dans la version 1.1.54131 de ClickHouse, 2017-01-10 {#fixed-in-clickhouse-release-1-1-54131-2017-01-10} + +### CVE-2018-14670 {#cve-2018-14670} + +Configuration incorrecte dans le paquet deb pourrait conduire à l'utilisation non autorisée de la base de données. + +Crédits: National Cyber Security Centre (NCSC) + +{## [Article Original](https://clickhouse.tech/docs/en/security_changelog/) ##} diff --git a/docs/toc_fr.yml b/docs/toc_fr.yml new file mode 100644 index 00000000000..cecd7327a5f --- /dev/null +++ b/docs/toc_fr.yml @@ -0,0 +1,244 @@ +nav: +- Introduction: + - "Aper\xE7u": index.md + - "Caract\xE9ristiques distinctives de ClickHouse": introduction/distinctive_features.md + - "Caract\xE9ristiques de ClickHouse qui peuvent \xEAtre consid\xE9r\xE9es comme des inconv\xE9nients": introduction/features_considered_disadvantages.md + - Performance: introduction/performance.md + - Histoire: introduction/history.md + - Adoptant: introduction/adopters.md +- Prise En Main: + - hidden: getting_started/index.md + - Installation: getting_started/install.md + - Tutoriel: getting_started/tutorial.md + - "Exemple De Jeux De Donn\xE9es": + - Introduction: getting_started/example_datasets/index.md + - OnTime: getting_started/example_datasets/ontime.md + - "New York Taxi Donn\xE9es": getting_started/example_datasets/nyc_taxi.md + - AMPLab Big Data Benchmark: getting_started/example_datasets/amplab_benchmark.md + - WikiStat: getting_started/example_datasets/wikistat.md + - "T\xE9raoctet click Logs de Criteo": getting_started/example_datasets/criteo.md + - "R\xE9f\xE9rence Du Sch\xE9ma En \xC9toile": getting_started/example_datasets/star_schema.md + - "Yandex.Metrica De Donn\xE9es": getting_started/example_datasets/metrica.md + - "R\xE9cr\xE9ation": getting_started/playground.md +- Interface: + - Introduction: interfaces/index.md + - Client De Ligne De Commande: interfaces/cli.md + - Interface Native (TCP): interfaces/tcp.md + - Interface HTTP: interfaces/http.md + - Interface MySQL: interfaces/mysql.md + - "Formats d'entr\xE9e et de sortie": interfaces/formats.md + - JDBC: interfaces/jdbc.md + - Pilote ODBC: interfaces/odbc.md + - "Biblioth\xE8que Client C++ ": interfaces/cpp.md + - tiers: + - "Biblioth\xE8ques Clientes": interfaces/third-party/client_libraries.md + - "Int\xE9gration": interfaces/third-party/integrations.md + - Les Interfaces Visuelles: interfaces/third-party/gui.md + - Proxy: interfaces/third-party/proxy.md +- Moteur: + - Moteurs De Table: + - Introduction: operations/table_engines/index.md + - Famille MergeTree: + - MergeTree: operations/table_engines/mergetree.md + - "R\xE9plication Des Donn\xE9es": operations/table_engines/replication.md + - "Cl\xE9 De Partitionnement Personnalis\xE9e": operations/table_engines/custom_partitioning_key.md + - ReplacingMergeTree: operations/table_engines/replacingmergetree.md + - SummingMergeTree: operations/table_engines/summingmergetree.md + - AggregatingMergeTree: operations/table_engines/aggregatingmergetree.md + - CollapsingMergeTree: operations/table_engines/collapsingmergetree.md + - VersionedCollapsingMergeTree: operations/table_engines/versionedcollapsingmergetree.md + - GraphiteMergeTree: operations/table_engines/graphitemergetree.md + - Journal De La Famille: + - Introduction: operations/table_engines/log_family.md + - StripeLog: operations/table_engines/stripelog.md + - Journal: operations/table_engines/log.md + - TinyLog: operations/table_engines/tinylog.md + - "Int\xE9gration": + - Kafka: operations/table_engines/kafka.md + - MySQL: operations/table_engines/mysql.md + - JDBC: operations/table_engines/jdbc.md + - ODBC: operations/table_engines/odbc.md + - HDFS: operations/table_engines/hdfs.md + - "Sp\xE9cial": + - "Distribu\xE9": operations/table_engines/distributed.md + - "De donn\xE9es externes": operations/table_engines/external_data.md + - Dictionnaire: operations/table_engines/dictionary.md + - Fusionner: operations/table_engines/merge.md + - Fichier: operations/table_engines/file.md + - 'NULL': operations/table_engines/null.md + - "D\xE9finir": operations/table_engines/set.md + - Rejoindre: operations/table_engines/join.md + - URL: operations/table_engines/url.md + - Vue: operations/table_engines/view.md + - MaterializedView: operations/table_engines/materializedview.md + - "M\xE9moire": operations/table_engines/memory.md + - Tampon: operations/table_engines/buffer.md + - GenerateRandom: operations/table_engines/generate.md + - "Moteurs De Base De Donn\xE9es": + - Introduction: database_engines/index.md + - MySQL: database_engines/mysql.md + - Paresseux: database_engines/lazy.md +- "R\xE9f\xE9rence SQL": + - hidden: query_language/index.md + - Syntaxe: query_language/syntax.md + - "D\xE9claration": + - SELECT: query_language/select.md + - INSERT INTO: query_language/insert_into.md + - CREATE: query_language/create.md + - ALTER: query_language/alter.md + - SYSTEM: query_language/system.md + - SHOW: query_language/show.md + - Autre: query_language/misc.md + - Fonction: + - Introduction: query_language/functions/index.md + - "Arithm\xE9tique": query_language/functions/arithmetic_functions.md + - Comparaison: query_language/functions/comparison_functions.md + - Logique: query_language/functions/logical_functions.md + - La Conversion De Type: query_language/functions/type_conversion_functions.md + - Travailler avec les Dates et les heures: query_language/functions/date_time_functions.md + - "Travailler avec des cha\xEEnes": query_language/functions/string_functions.md + - "Pour Rechercher Des Cha\xEEnes": query_language/functions/string_search_functions.md + - "Pour remplacer dans les cha\xEEnes": query_language/functions/string_replace_functions.md + - 'Conditionnel ': query_language/functions/conditional_functions.md + - "Math\xE9matique": query_language/functions/math_functions.md + - Arrondi: query_language/functions/rounding_functions.md + - Travailler avec des tableaux: query_language/functions/array_functions.md + - "Fractionnement et fusion de cha\xEEnes et de tableaux": query_language/functions/splitting_merging_functions.md + - Bit: query_language/functions/bit_functions.md + - Bitmap: query_language/functions/bitmap_functions.md + - Hachage: query_language/functions/hash_functions.md + - "La G\xE9n\xE9ration De Nombres Pseudo-Al\xE9atoires": query_language/functions/random_functions.md + - Encodage: query_language/functions/encoding_functions.md + - Travailler avec UUID: query_language/functions/uuid_functions.md + - Travailler avec des URL: query_language/functions/url_functions.md + - Travailler avec des adresses IP: query_language/functions/ip_address_functions.md + - Travailler avec JSON.: query_language/functions/json_functions.md + - "D'Ordre Sup\xE9rieur": query_language/functions/higher_order_functions.md + - Travailler avec des dictionnaires externes: query_language/functions/ext_dict_functions.md + - Travailler avec Yandex.Dictionnaires Metrica: query_language/functions/ym_dict_functions.md + - "Mise en \u0153uvre de L'op\xE9rateur IN": query_language/functions/in_functions.md + - arrayJoin: query_language/functions/array_join.md + - "Travailler avec des coordonn\xE9es g\xE9ographiques": query_language/functions/geo.md + - Travailler avec des arguments nullables: query_language/functions/functions_for_nulls.md + - Fonctions D'Apprentissage Automatique: query_language/functions/machine_learning_functions.md + - Introspection: query_language/functions/introspection.md + - Autre: query_language/functions/other_functions.md + - "Les Fonctions D'Agr\xE9gation": + - Introduction: query_language/agg_functions/index.md + - "R\xE9f\xE9rence": query_language/agg_functions/reference.md + - "Combinateurs de fonction d'agr\xE9gat": query_language/agg_functions/combinators.md + - "Fonctions d'agr\xE9gat param\xE9triques": query_language/agg_functions/parametric_functions.md + - Les Fonctions De Table: + - Introduction: query_language/table_functions/index.md + - fichier: query_language/table_functions/file.md + - fusionner: query_language/table_functions/merge.md + - nombre: query_language/table_functions/numbers.md + - distant: query_language/table_functions/remote.md + - URL: query_language/table_functions/url.md + - mysql: query_language/table_functions/mysql.md + - jdbc: query_language/table_functions/jdbc.md + - ODBC: query_language/table_functions/odbc.md + - hdfs: query_language/table_functions/hdfs.md + - "entr\xE9e": query_language/table_functions/input.md + - generateRandom: query_language/table_functions/generate.md + - Dictionnaire: + - Introduction: query_language/dicts/index.md + - Dictionnaires Externes: + - "Description G\xE9n\xE9rale": query_language/dicts/external_dicts.md + - Configuration D'un dictionnaire externe: query_language/dicts/external_dicts_dict.md + - "Stockage des dictionnaires en m\xE9moire": query_language/dicts/external_dicts_dict_layout.md + - "Mises \xC0 Jour Du Dictionnaire": query_language/dicts/external_dicts_dict_lifetime.md + - Sources de dictionnaires externes: query_language/dicts/external_dicts_dict_sources.md + - "Cl\xE9 et champs du dictionnaire": query_language/dicts/external_dicts_dict_structure.md + - "Dictionnaires hi\xE9rarchiques": query_language/dicts/external_dicts_dict_hierarchical.md + - Dictionnaires Internes: query_language/dicts/internal_dicts.md + - "Op\xE9rateur": query_language/operators.md + - "Types De Donn\xE9es": + - Introduction: data_types/index.md + - UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64: data_types/int_uint.md + - Float32, Float64: data_types/float.md + - "D\xE9cimal": data_types/decimal.md + - "Bool\xE9en": data_types/boolean.md + - "Cha\xEEne": data_types/string.md + - FixedString (N): data_types/fixedstring.md + - UUID: data_types/uuid.md + - Date: data_types/date.md + - DateTime: data_types/datetime.md + - DateTime64: data_types/datetime64.md + - Enum: data_types/enum.md + - Array(T): data_types/array.md + - AggregateFunction (nom, types_of_arguments...): data_types/nested_data_structures/aggregatefunction.md + - Tuple (T1, T2,...): data_types/tuple.md + - Nullable: data_types/nullable.md + - "Structures De Donn\xE9es Imbriqu\xE9es": + - hidden: data_types/nested_data_structures/index.md + - "Imbriqu\xE9e(Type1 Nom1, Nom2 Type2, ...)": data_types/nested_data_structures/nested.md + - "Types De Donn\xE9es Sp\xE9ciaux": + - hidden: data_types/special_data_types/index.md + - Expression: data_types/special_data_types/expression.md + - "D\xE9finir": data_types/special_data_types/set.md + - Rien: data_types/special_data_types/nothing.md + - Intervalle: data_types/special_data_types/interval.md + - Domaine: + - "Aper\xE7u": data_types/domains/overview.md + - IPv4: data_types/domains/ipv4.md + - IPv6: data_types/domains/ipv6.md +- Guide: + - "Aper\xE7u": guides/index.md + - "Application Des Mod\xE8les CatBoost": guides/apply_catboost_model.md +- "Op\xE9rations": + - Introduction: operations/index.md + - Exigence: operations/requirements.md + - Surveiller: operations/monitoring.md + - "D\xE9pannage": operations/troubleshooting.md + - "Mise \xC0 Jour De ClickHouse": operations/update.md + - "Les Droits D'Acc\xE8s": operations/access_rights.md + - "La Sauvegarde Des Donn\xE9es": operations/backup.md + - Fichiers De Configuration: operations/configuration_files.md + - Quota: operations/quotas.md + - "Les Tables Syst\xE8me": operations/system_tables.md + - Optimisation Des Performances: + - "Profilage De Requ\xEAte": operations/performance/sampling_query_profiler.md + - "Tester Le Mat\xE9riel": operations/performance_test.md + - "Param\xE8tres De Configuration Du Serveur": + - Introduction: operations/server_settings/index.md + - "Les Param\xE8tres Du Serveur": operations/server_settings/settings.md + - "Param\xE8tre": + - Introduction: operations/settings/index.md + - "Autorisations pour les requ\xEAtes": operations/settings/permissions_for_queries.md + - "Restrictions sur la complexit\xE9 des requ\xEAtes": operations/settings/query_complexity.md + - "Param\xE8tre": operations/settings/settings.md + - "Les Param\xE8tres Des Profils": operations/settings/settings_profiles.md + - "Contraintes sur les param\xE8tres": operations/settings/constraints_on_settings.md + - "Les Param\xE8tres De L'Utilisateur": operations/settings/settings_users.md + - Utilitaire: + - "Aper\xE7u": operations/utils/index.md + - clickhouse-copieur: operations/utils/clickhouse-copier.md + - clickhouse-local: operations/utils/clickhouse-local.md + - clickhouse-benchmark: operations/utils/clickhouse-benchmark.md + - Recommandations D'Utilisation: operations/tips.md +- "D\xE9veloppement": + - hidden: development/index.md + - "Le D\xE9butant Clickhouse Developer Instruction": development/developer_instruction.md + - Vue d'ensemble de L'Architecture ClickHouse: development/architecture.md + - Parcourir Le Code Source De ClickHouse: development/browse_code.md + - Comment Construire ClickHouse sur Linux: development/build.md + - Comment Construire ClickHouse sur Mac OS X: development/build_osx.md + - Comment Construire ClickHouse sur Linux pour Mac OS X: development/build_cross_osx.md + - Comment Construire ClickHouse sur Linux pour AARCH64 (ARM64): development/build_cross_arm.md + - "Comment \xE9crire du Code C++ ": development/style.md + - "Comment ex\xE9cuter des Tests ClickHouse": development/tests.md + - "Biblioth\xE8ques Tierces Utilis\xE9es": development/contrib.md +- Commercial: + - Fournisseurs De Services Cloud: commercial/cloud.md +- Ce qui est Nouveau: + - Feuille de route: roadmap.md + - Changelog: + - '2020': changelog/index.md + - '2019': changelog/2019.md + - '2018': changelog/2018.md + - '2017': changelog/2017.md + - "S\xE9curit\xE9 Changelog": security_changelog.md +- F.A.Q.: + - "Questions G\xE9n\xE9rales": faq/general.md + diff --git a/docs/tools/build.py b/docs/tools/build.py index 5079e8eaa24..626a417a46a 100755 --- a/docs/tools/build.py +++ b/docs/tools/build.py @@ -79,6 +79,7 @@ def build_for_lang(lang, args): site_names = { 'en': 'ClickHouse %s Documentation', 'es': 'Documentación de ClickHouse %s', + 'fr': 'Documentation ClickHouse %s', 'ru': 'Документация ClickHouse %s', 'zh': 'ClickHouse文档 %s', 'ja': 'ClickHouseドキュメント %s', @@ -89,6 +90,7 @@ def build_for_lang(lang, args): 'en': 'English', 'zh': '中文', 'es': 'Español', + 'fr': 'Français', 'ru': 'Русский', 'ja': '日本語', 'fa': 'فارسی' @@ -255,6 +257,7 @@ def build_single_page_version(lang, args, cfg): logging.info(' '.join(create_pdf_command)) subprocess.check_call(' '.join(create_pdf_command), shell=True) httpd.shutdown() + thread.join(timeout=5.0) if not args.version_prefix: # maybe enable in future test.test_single_page( @@ -343,7 +346,7 @@ if __name__ == '__main__': os.chdir(os.path.join(os.path.dirname(__file__), '..')) website_dir = os.path.join('..', 'website') arg_parser = argparse.ArgumentParser() - arg_parser.add_argument('--lang', default='en,es,ru,zh,ja,fa') + arg_parser.add_argument('--lang', default='en,es,fr,ru,zh,ja,fa') arg_parser.add_argument('--docs-dir', default='.') arg_parser.add_argument('--theme-dir', default=website_dir) arg_parser.add_argument('--website-dir', default=website_dir) diff --git a/docs/tools/translate/translate.py b/docs/tools/translate/translate.py index c3767e7990b..5b4dc3f5486 100755 --- a/docs/tools/translate/translate.py +++ b/docs/tools/translate/translate.py @@ -46,15 +46,17 @@ def translate(text, target_language=None): return translator.translate(text, target_language).text -def translate_toc(root): +def translate_toc(root, lang): + global is_yandex + is_yandex = True if isinstance(root, dict): result = [] for key, value in root.items(): - key = translate(key) if key != 'hidden' and not key.isupper() else key - result.append((key, translate_toc(value),)) + key = translate(key, lang) if key != 'hidden' and not key.isupper() else key + result.append((key, translate_toc(value, lang),)) return dict(result) elif isinstance(root, list): - return [translate_toc(item) for item in root] + return [translate_toc(item, lang) for item in root] elif isinstance(root, str): return root @@ -62,7 +64,7 @@ def translate_toc(root): def translate_po(): import babel.messages.pofile base_dir = os.path.join(os.path.dirname(__file__), '..', '..', 'website', 'locale') - for lang in ['en', 'zh', 'es', 'ru', 'ja', 'fa']: + for lang in ['en', 'zh', 'es', 'fr', 'ru', 'ja', 'fa']: po_path = os.path.join(base_dir, lang, 'LC_MESSAGES', 'messages.po') with open(po_path, 'r') as f: po_file = babel.messages.pofile.read_po(f, locale=lang, domain='messages') @@ -80,6 +82,5 @@ if __name__ == '__main__': if target_language == 'po': translate_po() else: - is_yandex = True - result = translate_toc(yaml.full_load(sys.stdin.read())['nav']) + result = translate_toc(yaml.full_load(sys.stdin.read())['nav'], sys.argv[1]) print(yaml.dump({'nav': result})) diff --git a/docs/tools/translate/update-po.sh b/docs/tools/translate/update-po.sh index 81c37299323..bf9d1d4b7fb 100755 --- a/docs/tools/translate/update-po.sh +++ b/docs/tools/translate/update-po.sh @@ -6,7 +6,7 @@ WEBSITE_DIR="${BASE_DIR}/../../website" LOCALE_DIR="${WEBSITE_DIR}/locale" MESSAGES_POT="${LOCALE_DIR}/messages.pot" BABEL_INI="${BASE_DIR}/babel-mapping.ini" -LANGS="en ru zh ja fa es" +LANGS="en zh es fr ru ja fa" source "${BASE_DIR}/venv/bin/activate" cd "${WEBSITE_DIR}" pybabel extract "." -o "${MESSAGES_POT}" -F "${BABEL_INI}" diff --git a/website/images/flags/fr.svg b/website/images/flags/fr.svg new file mode 100644 index 00000000000..a4bded524b8 --- /dev/null +++ b/website/images/flags/fr.svg @@ -0,0 +1,2 @@ + + diff --git a/website/locale/en/LC_MESSAGES/messages.po b/website/locale/en/LC_MESSAGES/messages.po index 383728d2f76..c272d156de6 100644 --- a/website/locale/en/LC_MESSAGES/messages.po +++ b/website/locale/en/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2020-03-28 10:54+0300\n" +"POT-Creation-Date: 2020-03-30 15:12+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language: en\n" @@ -20,7 +20,7 @@ msgstr "" "Generated-By: Babel 2.8.0\n" #: templates/common_meta.html:5 templates/common_meta.html:9 -#: templates/common_meta.html:17 +#: templates/common_meta.html:16 msgid "ClickHouse DBMS" msgstr "ClickHouse DBMS" @@ -34,7 +34,7 @@ msgstr "" "that allows generating analytical data reports in real time using SQL " "queries." -#: templates/common_meta.html:20 +#: templates/common_meta.html:19 msgid "" "ClickHouse is an open source distributed column-oriented database " "management system that allows generating analytical data reports in real " @@ -62,11 +62,11 @@ msgstr "" msgid "Yandex LLC" msgstr "Yandex LLC" -#: templates/docs/content.html:5 +#: templates/docs/content.html:6 msgid "Help wanted!" msgstr "Help wanted!" -#: templates/docs/content.html:6 +#: templates/docs/content.html:7 msgid "" "The following content of this documentation page has been machine-" "translated. But unlike other websites, it is not done on the fly. This " @@ -80,7 +80,7 @@ msgstr "" "codebase and waits for fellow native speakers to make it more human-" "readable." -#: templates/docs/content.html:9 +#: templates/docs/content.html:10 msgid "Help ClickHouse documentation by editing this page" msgstr "Help ClickHouse documentation by editing this page" diff --git a/website/locale/es/LC_MESSAGES/messages.mo b/website/locale/es/LC_MESSAGES/messages.mo index 5a4d16e2f66..e7a8e7bd13c 100644 Binary files a/website/locale/es/LC_MESSAGES/messages.mo and b/website/locale/es/LC_MESSAGES/messages.mo differ diff --git a/website/locale/es/LC_MESSAGES/messages.po b/website/locale/es/LC_MESSAGES/messages.po index c9b1ff0864c..1a8706e60fd 100644 --- a/website/locale/es/LC_MESSAGES/messages.po +++ b/website/locale/es/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2020-03-28 10:54+0300\n" +"POT-Creation-Date: 2020-03-30 15:12+0300\n" "PO-Revision-Date: 2020-03-26 10:19+0300\n" "Last-Translator: FULL NAME \n" "Language: es\n" @@ -19,7 +19,7 @@ msgstr "" "Generated-By: Babel 2.8.0\n" #: templates/common_meta.html:5 templates/common_meta.html:9 -#: templates/common_meta.html:17 +#: templates/common_meta.html:16 msgid "ClickHouse DBMS" msgstr "Sistema abierto." @@ -33,7 +33,7 @@ msgstr "" "columnas de código abierto que permite generar informes de datos " "analíticos en tiempo real utilizando consultas SQL." -#: templates/common_meta.html:20 +#: templates/common_meta.html:19 msgid "" "ClickHouse is an open source distributed column-oriented database " "management system that allows generating analytical data reports in real " @@ -61,11 +61,11 @@ msgstr "" msgid "Yandex LLC" msgstr "Sistema abierto." -#: templates/docs/content.html:5 +#: templates/docs/content.html:6 msgid "Help wanted!" msgstr "Ayuda quería!" -#: templates/docs/content.html:6 +#: templates/docs/content.html:7 msgid "" "The following content of this documentation page has been machine-" "translated. But unlike other websites, it is not done on the fly. This " @@ -79,7 +79,7 @@ msgstr "" "la base de código principal de ClickHouse y espera a que otros hablantes " "nativos lo hagan más legible por humanos." -#: templates/docs/content.html:9 +#: templates/docs/content.html:10 msgid "Help ClickHouse documentation by editing this page" msgstr "Ayuda a la documentación de ClickHouse editando esta página" diff --git a/website/locale/fa/LC_MESSAGES/messages.mo b/website/locale/fa/LC_MESSAGES/messages.mo index 46730c6e20e..6d2a415b7fc 100644 Binary files a/website/locale/fa/LC_MESSAGES/messages.mo and b/website/locale/fa/LC_MESSAGES/messages.mo differ diff --git a/website/locale/fa/LC_MESSAGES/messages.po b/website/locale/fa/LC_MESSAGES/messages.po index cdaf8cab258..5e4205412d1 100644 --- a/website/locale/fa/LC_MESSAGES/messages.po +++ b/website/locale/fa/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2020-03-28 10:54+0300\n" +"POT-Creation-Date: 2020-03-30 15:12+0300\n" "PO-Revision-Date: 2020-03-26 10:19+0300\n" "Last-Translator: FULL NAME \n" "Language: fa\n" @@ -19,7 +19,7 @@ msgstr "" "Generated-By: Babel 2.8.0\n" #: templates/common_meta.html:5 templates/common_meta.html:9 -#: templates/common_meta.html:17 +#: templates/common_meta.html:16 msgid "ClickHouse DBMS" msgstr "خانه عروسکی" @@ -33,7 +33,7 @@ msgstr "" " تا تولید گزارش داده تحلیلی در زمان واقعی با استفاده از پرس و جو گذاشتن " "است." -#: templates/common_meta.html:20 +#: templates/common_meta.html:19 msgid "" "ClickHouse is an open source distributed column-oriented database " "management system that allows generating analytical data reports in real " @@ -61,11 +61,11 @@ msgstr "" msgid "Yandex LLC" msgstr "Yandex, LLC" -#: templates/docs/content.html:5 +#: templates/docs/content.html:6 msgid "Help wanted!" msgstr "راهنما می خواستم!" -#: templates/docs/content.html:6 +#: templates/docs/content.html:7 msgid "" "The following content of this documentation page has been machine-" "translated. But unlike other websites, it is not done on the fly. This " @@ -78,7 +78,7 @@ msgstr "" " کنار پایگاه داده اصلی خانه کلیک زندگی می کند و منتظر سخنرانان مادری " "همکار به انسان بیشتر قابل خواندن است." -#: templates/docs/content.html:9 +#: templates/docs/content.html:10 msgid "Help ClickHouse documentation by editing this page" msgstr "راهنما مستندات تاتر با ویرایش این صفحه" diff --git a/website/locale/fr/LC_MESSAGES/messages.mo b/website/locale/fr/LC_MESSAGES/messages.mo new file mode 100644 index 00000000000..7d67a68c6e5 Binary files /dev/null and b/website/locale/fr/LC_MESSAGES/messages.mo differ diff --git a/website/locale/fr/LC_MESSAGES/messages.po b/website/locale/fr/LC_MESSAGES/messages.po new file mode 100644 index 00000000000..38cd1031b49 --- /dev/null +++ b/website/locale/fr/LC_MESSAGES/messages.po @@ -0,0 +1,272 @@ +# French translations for PROJECT. +# Copyright (C) 2020 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2020. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2020-03-30 15:12+0300\n" +"PO-Revision-Date: 2020-03-30 15:12+0300\n" +"Last-Translator: FULL NAME \n" +"Language: fr\n" +"Language-Team: fr \n" +"Plural-Forms: nplurals=2; plural=(n > 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.8.0\n" + +#: templates/common_meta.html:5 templates/common_meta.html:9 +#: templates/common_meta.html:16 +msgid "ClickHouse DBMS" +msgstr "SGBD ClickHouse" + +#: templates/common_meta.html:11 +msgid "" +"ClickHouse is an open source column-oriented database management system " +"that allows generating analytical data reports in real time using SQL " +"queries." +msgstr "" +"ClickHouse est un système de gestion de base de données orienté colonne " +"open source qui permet de générer des rapports de données analytiques en " +"temps réel à l'aide de requêtes SQL." + +#: templates/common_meta.html:19 +msgid "" +"ClickHouse is an open source distributed column-oriented database " +"management system that allows generating analytical data reports in real " +"time using SQL queries. Сreated by Yandex ClickHouse manages extremely " +"large volumes of data in a stable and sustainable manner." +msgstr "" +"ClickHouse is an open source distributed column-oriented database " +"management system that allows generating analytical data reports in real " +"time using SQL queries. Сreated by Yandex ClickHouse manages extremely " +"large volumes of data in a stable and sustainable manner." + +#: templates/footer.html:8 +msgid "ClickHouse source code is published under the Apache 2.0 License." +msgstr "Le code source de ClickHouse est publié sous la licence Apache 2.0." + +#: templates/footer.html:8 +msgid "" +"Software is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR " +"CONDITIONS OF ANY KIND, either express or implied." +msgstr "" +"Le logiciel est distribué \"tel quel\", sans garantie ni condition " +"d'AUCUNE SORTE, expresse ou implicite." + +#: templates/footer.html:11 +msgid "Yandex LLC" +msgstr "Yandex LLC" + +#: templates/docs/content.html:6 +msgid "Help wanted!" +msgstr "Demander de l'aide!" + +#: templates/docs/content.html:7 +msgid "" +"The following content of this documentation page has been machine-" +"translated. But unlike other websites, it is not done on the fly. This " +"translated text lives on GitHub repository alongside main ClickHouse " +"codebase and waits for fellow native speakers to make it more human-" +"readable." +msgstr "" +"Le contenu suivant de cette page de documentation a été traduit à la " +"machine. Mais contrairement à d'autres sites web, il ne se fait pas à la " +"volée. Ce texte traduit vit sur le dépôt GitHub aux côtés de la base de " +"code ClickHouse principale et attend que d'autres locuteurs natifs le " +"rendent plus lisible par l'homme." + +#: templates/docs/content.html:10 +msgid "Help ClickHouse documentation by editing this page" +msgstr "Aide clickhouse documentation en éditant cette page" + +#: templates/docs/content.html:31 +msgid "Built from" +msgstr "Construit à partir de" + +#: templates/docs/sidebar.html:3 +msgid "Multi-page or single-page" +msgstr "Multi-page ou une seule page" + +#: templates/docs/sidebar.html:5 +msgid "Multi-page version" +msgstr "Multi-version de la page" + +#: templates/docs/sidebar.html:8 +msgid "Single-page version" +msgstr "Version d'une seule page" + +#: templates/docs/sidebar.html:13 +msgid "Version" +msgstr "Version" + +#: templates/docs/sidebar.html:13 templates/docs/sidebar.html:19 +msgid "latest" +msgstr "dernier" + +#: templates/docs/sidebar.html:36 +msgid "PDF version" +msgstr "Version PDF" + +#: templates/docs/toc.html:8 +msgid "Table of Contents" +msgstr "Table des matières" + +#: templates/index/community.html:4 +msgid "ClickHouse community" +msgstr "Clickhouse communauté" + +#: templates/index/community.html:13 templates/index/community.html:14 +msgid "ClickHouse YouTube Channel" +msgstr "ClickHouse Chaîne YouTube" + +#: templates/index/community.html:25 templates/index/community.html:26 +msgid "ClickHouse Official Twitter Account" +msgstr "ClickHouse Compte Twitter Officiel" + +#: templates/index/community.html:36 templates/index/community.html:37 +msgid "ClickHouse at Telegram" +msgstr "ClickHouse au Télégramme" + +#: templates/index/community.html:41 +msgid "Chat with real users in " +msgstr "Discuter avec de vrais utilisateurs dans " + +#: templates/index/community.html:44 templates/index/community.html:116 +msgid "English" +msgstr "Anglais" + +#: templates/index/community.html:45 +msgid "or in" +msgstr "ou dans" + +#: templates/index/community.html:47 templates/index/community.html:117 +msgid "Russian" +msgstr "Russe" + +#: templates/index/community.html:65 +msgid "Open GitHub issue to ask for help or to file a feature request" +msgstr "" +"Ouvrir GitHub question de demander de l'aide, ou pour déposer une demande" +" de fonctionnalité" + +#: templates/index/community.html:76 templates/index/community.html:77 +msgid "ClickHouse Slack Workspace" +msgstr "Espace De Travail ClickHouse Slack" + +#: templates/index/community.html:82 +msgid "Multipurpose public hangout" +msgstr "Lieu de rencontre public polyvalent" + +#: templates/index/community.html:101 +msgid "Ask any questions" +msgstr "Posez toutes les questions" + +#: templates/index/community.html:115 +msgid "ClickHouse Blog" +msgstr "Clickhouse Blog" + +#: templates/index/community.html:116 +msgid "in" +msgstr "dans" + +#: templates/index/community.html:128 templates/index/community.html:129 +msgid "ClickHouse at Google Groups" +msgstr "ClickHouse à Google Groupes" + +#: templates/index/community.html:133 +msgid "Email discussions" +msgstr "Discussions par courriel" + +#: templates/index/community.html:142 +msgid "Like ClickHouse?" +msgstr "Comme ClickHouse?" + +#: templates/index/community.html:142 +msgid "Help to spread the word about it via" +msgstr "Aider à passer le mot à ce sujet via" + +#: templates/index/community.html:143 +msgid "and" +msgstr "et" + +#: templates/index/community.html:155 +msgid "Hosting ClickHouse Meetups" +msgstr "Accueil Clickhouse Meetups" + +#: templates/index/community.html:157 +msgid "" +"ClickHouse meetups are essential for strengthening community worldwide, " +"but they couldn't be possible without the help of local organizers. " +"Please, feel this form if you want to become one or want to meet " +"ClickHouse core team for any other reason." +msgstr "" +"Les rencontres ClickHouse sont essentielles pour renforcer la communauté " +"dans le monde entier, mais elles ne pourraient pas être possibles sans " +"l'aide d'organisateurs locaux. S'il vous plaît, sentez ce formulaire si " +"vous voulez devenir l'une ou souhaitez rencontrer ClickHouse équipe de " +"base pour toute autre raison." + +#: templates/index/community.html:159 +msgid "ClickHouse Meetup" +msgstr "Clickhouse Meetup" + +#: templates/index/community.html:165 +msgid "Name" +msgstr "Nom" + +#: templates/index/community.html:168 +msgid "Email" +msgstr "Courriel" + +#: templates/index/community.html:171 +msgid "Company" +msgstr "Entreprise" + +#: templates/index/community.html:174 +msgid "City" +msgstr "Ville" + +#: templates/index/community.html:179 +msgid "We'd like to host a public ClickHouse Meetup" +msgstr "Nous aimerions organiser un Meetup public ClickHouse" + +#: templates/index/community.html:185 +msgid "We'd like to invite Yandex ClickHouse team to our office" +msgstr "Nous aimerions inviter l'équipe de Yandex ClickHouse à notre bureau" + +#: templates/index/community.html:191 +msgid "We'd like to invite Yandex ClickHouse team to another event we organize" +msgstr "" +"Nous aimerions inviter l'équipe de Yandex ClickHouse à un autre événement" +" que nous organisons" + +#: templates/index/community.html:197 +msgid "We're interested in commercial consulting, support or managed service" +msgstr "" +"Nous sommes intéressés par le conseil commercial, le soutien ou le " +"service géré" + +#: templates/index/community.html:201 +msgid "Additional comments" +msgstr "Commentaires supplémentaires" + +#: templates/index/community.html:203 +msgid "Send" +msgstr "Envoyer" + +#: templates/index/community.html:212 +msgid "" +"If you have any more thoughts or questions, feel free to contact Yandex " +"ClickHouse team directly at" +msgstr "" +"Si vous avez d'autres pensées ou questions, n'hésitez pas à contacter " +"L'équipe Yandex ClickHouse directement à" + +#: templates/index/community.html:213 +msgid "turn on JavaScript to see email address" +msgstr "activer JavaScript pour voir l'adresse e-mail" + diff --git a/website/locale/ja/LC_MESSAGES/messages.mo b/website/locale/ja/LC_MESSAGES/messages.mo index b201bb98923..ec416b79c0a 100644 Binary files a/website/locale/ja/LC_MESSAGES/messages.mo and b/website/locale/ja/LC_MESSAGES/messages.mo differ diff --git a/website/locale/ja/LC_MESSAGES/messages.po b/website/locale/ja/LC_MESSAGES/messages.po index 96f108c8178..e0c901ea399 100644 --- a/website/locale/ja/LC_MESSAGES/messages.po +++ b/website/locale/ja/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2020-03-28 10:54+0300\n" +"POT-Creation-Date: 2020-03-30 15:12+0300\n" "PO-Revision-Date: 2020-03-26 10:19+0300\n" "Last-Translator: FULL NAME \n" "Language: ja\n" @@ -19,7 +19,7 @@ msgstr "" "Generated-By: Babel 2.8.0\n" #: templates/common_meta.html:5 templates/common_meta.html:9 -#: templates/common_meta.html:17 +#: templates/common_meta.html:16 msgid "ClickHouse DBMS" msgstr "クリックハウスDBMS" @@ -30,7 +30,7 @@ msgid "" "queries." msgstr "ClickHouseオープンソース列指向データベース管理システムで生成解析データをリアルタイムのレポート用のSQLクエリ." -#: templates/common_meta.html:20 +#: templates/common_meta.html:19 msgid "" "ClickHouse is an open source distributed column-oriented database " "management system that allows generating analytical data reports in real " @@ -56,11 +56,11 @@ msgstr "ソフトウェアは、明示または黙示を問わず、いかなる msgid "Yandex LLC" msgstr "Yandex LLC" -#: templates/docs/content.html:5 +#: templates/docs/content.html:6 msgid "Help wanted!" msgstr "助けが欲しかった!" -#: templates/docs/content.html:6 +#: templates/docs/content.html:7 msgid "" "The following content of this documentation page has been machine-" "translated. But unlike other websites, it is not done on the fly. This " @@ -71,7 +71,7 @@ msgstr "" "このドキュメントページの以下の内容は機械翻訳されています。 異な他のウェブサイトで行われませんができます。 " "この翻訳テキスト生活をGitHubリポジトリとClickHouseコードベース、待ち員ネイティブスピーカーで人間が読む." -#: templates/docs/content.html:9 +#: templates/docs/content.html:10 msgid "Help ClickHouse documentation by editing this page" msgstr "このページを編集してClickHouseの文書を編集する" diff --git a/website/locale/messages.pot b/website/locale/messages.pot index ea9911d4d88..a09273f2907 100644 --- a/website/locale/messages.pot +++ b/website/locale/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2020-03-28 10:54+0300\n" +"POT-Creation-Date: 2020-03-30 15:12+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -18,7 +18,7 @@ msgstr "" "Generated-By: Babel 2.8.0\n" #: templates/common_meta.html:5 templates/common_meta.html:9 -#: templates/common_meta.html:17 +#: templates/common_meta.html:16 msgid "ClickHouse DBMS" msgstr "" @@ -29,7 +29,7 @@ msgid "" "queries." msgstr "" -#: templates/common_meta.html:20 +#: templates/common_meta.html:19 msgid "" "ClickHouse is an open source distributed column-oriented database " "management system that allows generating analytical data reports in real " @@ -51,11 +51,11 @@ msgstr "" msgid "Yandex LLC" msgstr "" -#: templates/docs/content.html:5 +#: templates/docs/content.html:6 msgid "Help wanted!" msgstr "" -#: templates/docs/content.html:6 +#: templates/docs/content.html:7 msgid "" "The following content of this documentation page has been machine-" "translated. But unlike other websites, it is not done on the fly. This " @@ -64,7 +64,7 @@ msgid "" "readable." msgstr "" -#: templates/docs/content.html:9 +#: templates/docs/content.html:10 msgid "Help ClickHouse documentation by editing this page" msgstr "" diff --git a/website/locale/ru/LC_MESSAGES/messages.mo b/website/locale/ru/LC_MESSAGES/messages.mo index aefce06cc29..d6e0e5eaffe 100644 Binary files a/website/locale/ru/LC_MESSAGES/messages.mo and b/website/locale/ru/LC_MESSAGES/messages.mo differ diff --git a/website/locale/ru/LC_MESSAGES/messages.po b/website/locale/ru/LC_MESSAGES/messages.po index 6654d295f3d..32241543cbd 100644 --- a/website/locale/ru/LC_MESSAGES/messages.po +++ b/website/locale/ru/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2020-03-28 10:54+0300\n" +"POT-Creation-Date: 2020-03-30 15:12+0300\n" "PO-Revision-Date: 2020-03-26 10:19+0300\n" "Last-Translator: FULL NAME \n" "Language: ru\n" @@ -20,7 +20,7 @@ msgstr "" "Generated-By: Babel 2.8.0\n" #: templates/common_meta.html:5 templates/common_meta.html:9 -#: templates/common_meta.html:17 +#: templates/common_meta.html:16 msgid "ClickHouse DBMS" msgstr "СУБД ClickHouse" @@ -34,7 +34,7 @@ msgstr "" "данных с открытым исходным кодом, позволяющая создавать аналитические " "отчеты о данных в режиме реального времени с использованием SQL-запросов." -#: templates/common_meta.html:20 +#: templates/common_meta.html:19 msgid "" "ClickHouse is an open source distributed column-oriented database " "management system that allows generating analytical data reports in real " @@ -62,11 +62,11 @@ msgstr "" msgid "Yandex LLC" msgstr "ООО «Яндекс»" -#: templates/docs/content.html:5 +#: templates/docs/content.html:6 msgid "Help wanted!" msgstr "Помощь нужна!" -#: templates/docs/content.html:6 +#: templates/docs/content.html:7 msgid "" "The following content of this documentation page has been machine-" "translated. But unlike other websites, it is not done on the fly. This " @@ -80,7 +80,7 @@ msgstr "" "кодовой базой ClickHouse и ждет, когда другие носители языка сделают его " "более удобочитаемым для человека." -#: templates/docs/content.html:9 +#: templates/docs/content.html:10 msgid "Help ClickHouse documentation by editing this page" msgstr "Помогите документации ClickHouse, отредактировав эту страницу" diff --git a/website/locale/zh/LC_MESSAGES/messages.mo b/website/locale/zh/LC_MESSAGES/messages.mo index 31d4996a0c7..3a2aa7f01c6 100644 Binary files a/website/locale/zh/LC_MESSAGES/messages.mo and b/website/locale/zh/LC_MESSAGES/messages.mo differ diff --git a/website/locale/zh/LC_MESSAGES/messages.po b/website/locale/zh/LC_MESSAGES/messages.po index 3518a417552..f86d756797b 100644 --- a/website/locale/zh/LC_MESSAGES/messages.po +++ b/website/locale/zh/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2020-03-28 10:54+0300\n" +"POT-Creation-Date: 2020-03-30 15:12+0300\n" "PO-Revision-Date: 2020-03-26 10:19+0300\n" "Last-Translator: FULL NAME \n" "Language: zh\n" @@ -19,7 +19,7 @@ msgstr "" "Generated-By: Babel 2.8.0\n" #: templates/common_meta.html:5 templates/common_meta.html:9 -#: templates/common_meta.html:17 +#: templates/common_meta.html:16 msgid "ClickHouse DBMS" msgstr "ツ环板msョツ嘉ッツ偲" @@ -30,7 +30,7 @@ msgid "" "queries." msgstr "ClickHouse是一个开源的面向列的数据库管理系统,允许使用SQL查询实时生成分析数据报告。" -#: templates/common_meta.html:20 +#: templates/common_meta.html:19 msgid "" "ClickHouse is an open source distributed column-oriented database " "management system that allows generating analytical data reports in real " @@ -56,11 +56,11 @@ msgstr "软件按\"原样\"分发,不附带任何明示或暗示的担保或 msgid "Yandex LLC" msgstr "Yandex LLC" -#: templates/docs/content.html:5 +#: templates/docs/content.html:6 msgid "Help wanted!" msgstr "帮助通缉!" -#: templates/docs/content.html:6 +#: templates/docs/content.html:7 msgid "" "The following content of this documentation page has been machine-" "translated. But unlike other websites, it is not done on the fly. This " @@ -71,7 +71,7 @@ msgstr "" "本文档页面的以下内容已经过机器翻译。 但与其他网站不同,它不是在飞行中完成。 " "这个翻译的文本生活在github存储库旁边的主ClickHouse代码库,并等待同胞母语,使其更具人类可读性。" -#: templates/docs/content.html:9 +#: templates/docs/content.html:10 msgid "Help ClickHouse documentation by editing this page" msgstr "通过编辑此页面帮助ClickHouse文档"