ClickHouse/docs/fr/engines/table-engines/mergetree-family/custom-partitioning-key.md
BayoNet dba72d73fe
DOCS-624: Fixing links to nowhere (#10675)
* enbaskakova-DOCSUP-652 (#101)

* "docs(orNull&orDefault): Functions 'orNull&orDefault' have been edited"

* "docs(orNull&orDefault): Functions 'orNull&orDefault' have been edited"

* "docs(orNull&orDefault): Functions 'orNull&orDefault' have been edited"

* Update docs/en/sql_reference/aggregate_functions/combinators.md

Co-Authored-By: BayoNet <da-daos@yandex.ru>

* Update docs/en/sql_reference/aggregate_functions/combinators.md

Co-Authored-By: BayoNet <da-daos@yandex.ru>

* Update docs/en/sql_reference/aggregate_functions/combinators.md

Co-Authored-By: BayoNet <da-daos@yandex.ru>

* Update docs/en/sql_reference/aggregate_functions/combinators.md

Co-Authored-By: BayoNet <da-daos@yandex.ru>

* Update docs/en/sql_reference/aggregate_functions/combinators.md

Co-Authored-By: BayoNet <da-daos@yandex.ru>

* "docs(orNull&orDefault): Functions 'orNull&orDefault' have been edited"

* "docs(orNull&orDefault): Functions 'orNull&orDefault' have been edited"

* "docs(orNull&orDefault): Functions 'orNull&orDefault' have been edited"

Co-authored-by: elenbaskakova <elenbaskakova@yandex-team.ru>
Co-authored-by: BayoNet <da-daos@yandex.ru>

* Revert "enbaskakova-DOCSUP-652 (#101)" (#107)

This reverts commit 639fee7610.

* CLICKHOUSEDOCS-624: Fixed links. Was 60, became 13.

* CLICKHOUSEDOCS-624: Finished fix links in Enlish version.

* CLICKHOUSEDOCS-624: Fixed RU links

Co-authored-by: elenaspb2019 <47083263+elenaspb2019@users.noreply.github.com>
Co-authored-by: elenbaskakova <elenbaskakova@yandex-team.ru>
Co-authored-by: Sergei Shtykov <bayonet@yandex-team.ru>
2020-05-06 09:13:29 +03:00

8.4 KiB
Raw Blame History

machine_translated machine_translated_rev toc_priority toc_title
true f865c9653f 32 Clé De Partitionnement Personnalisée

Clé De Partitionnement Personnalisée

Le partitionnement est disponible pour MergeTree table de famille (y compris les répliqué table). Les vues matérialisées basé sur les tables MergeTree prennent également en charge le partitionnement.

Une partition est une combinaison logique denregistrements 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 laccè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 dune table. La clé de partition peut être nimporte quelle expression des colonnes de la table. Par exemple, pour spécifier le partitionnement par mois, utilisez lexpression toYYYYMM(date_column):

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 dexpressions (similaire à la clé primaire). Exemple:

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 linsertion 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 linsertion, 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 lexpression de partitionnement. Cela signifie vous ne devriez pas faire des partitions trop granulaires (plus dun millier de partitions). Sinon, l SELECT la requête fonctionne mal en raison dun nombre déraisonnablement élevé de fichiers dans le système de fichiers et des descripteurs de fichiers ouverts.

Lutilisation de la système.partie 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:

SELECT
    partition,
    name,
    active
FROM system.parts
WHERE table = 'visits'
┌─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 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 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 larbre 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 lexemple, 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 linsertion. En outre, vous pouvez effectuer une fusion non planifiée en utilisant OPTIMIZE requête. Exemple:

OPTIMIZE TABLE visits PARTITION 201902;
┌─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 dafficher un ensemble de pièces et de partitions est daller dans le répertoire de la table: /var/lib/clickhouse/data/<database>/<table>/. Exemple:

/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 à laide DETACH requête. Les parties corrompues sont également déplacées dans ce répertoire, au lieu dêtre supprimées. Le serveur nutilise 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 requête.

Notez que sur le serveur dexploitation, vous ne pouvez pas modifier manuellement lensemble 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 nest pas recommandé. Pour les tables répliquées, lensemble de pièces ne peut en aucun cas être modifié.

ClickHouse vous permet deffectuer des opérations avec les partitions: les supprimer, copier dune 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.

Article Original