ClickHouse/docs/fr/engines/table-engines/special/merge.md

71 lines
3.6 KiB
Markdown
Raw Normal View History

2020-03-30 12:48:55 +00:00
---
machine_translated: true
2020-04-04 09:15:31 +00:00
machine_translated_rev: f865c9653f9df092694258e0ccdd733c339112f5
toc_priority: 36
toc_title: Fusionner
2020-03-30 12:48:55 +00:00
---
# Fusionner {#merge}
Le `Merge` moteur (à ne pas confondre avec `MergeTree`) ne stocke pas les données elles-mêmes, mais permet la lecture de nimporte quel nombre dautres tables simultanément.
La lecture est automatiquement parallélisée. Lécriture dans une table nest pas prise en charge. Lors de la lecture, les index des tables en cours de lecture sont utilisés, sils existent.
2020-03-30 12:48:55 +00:00
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 à lexpression régulière `^WatchLog`.
2020-03-30 12:48:55 +00:00
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.
2020-03-30 12:48:55 +00:00
Lors de la sélection des tables à lire, le `Merge` le tableau lui-même ne sera pas choisie, même si elle correspond à lexpression rationnelle. Cest 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 nest pas une bonne idée.
2020-03-30 12:48:55 +00:00
Lutilisation traditionnelle de la `Merge` moteur pour travailler avec un grand nombre de `TinyLog` les tables comme si avec une seule table.
2020-03-30 12:48:55 +00:00
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](../../../sql-reference/data-types/string.md).
2020-03-30 12:48:55 +00:00
Vous pouvez définir les conditions constantes sur `_table` dans le `WHERE/PREWHERE` clause (par exemple, `WHERE _table='xyz'`). Dans ce cas lopé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.
2020-03-30 12:48:55 +00:00
**Voir Aussi**
- [Les colonnes virtuelles](index.md#table_engines-virtual_columns)
[Article Original](https://clickhouse.tech/docs/en/operations/table_engines/merge/) <!--hide-->