2020-01-07 12:58:13 +00:00
# GraphiteMergeTree {#graphitemergetree}
2017-10-25 05:27:09 +00:00
2019-01-18 16:07:48 +00:00
Движок предназначен для прореживания и агрегирования/усреднения (rollup) данных [Graphite ](http://graphite.readthedocs.io/en/latest/index.html ). Он может быть интересен разработчикам, которые хотят использовать ClickHouse как хранилище данных для Graphite.
2020-02-02 21:46:31 +00:00
Если rollup не требуется, то для хранения данных Graphite можно использовать любой движок таблиц ClickHouse, в противном случае используйте `GraphiteMergeTree` . Движок уменьшает объём хранения и повышает эффективность запросов от Graphite.
2019-01-18 16:07:48 +00:00
Движок наследует свойства от [MergeTree ](mergetree.md ).
2020-01-07 12:58:13 +00:00
## Создание таблицы {#creating-table}
2019-01-18 16:07:48 +00:00
```sql
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
Path String,
Time DateTime,
Value < Numeric_type > ,
Version < Numeric_type >
...
) ENGINE = GraphiteMergeTree(config_section)
[PARTITION BY expr]
[ORDER BY expr]
[SAMPLE BY expr]
[SETTINGS name=value, ...]
```
2019-06-19 13:23:42 +00:00
Смотрите описание запроса [CREATE TABLE ](../../query_language/create.md#create-table-query ).
2019-01-18 16:07:48 +00:00
2019-06-19 13:23:42 +00:00
В таблице должны быть столбцы для следующих данных:
2017-10-25 05:27:09 +00:00
2019-06-19 13:23:42 +00:00
- Название метрики (сенсора Graphite). Тип данных: `String` .
2017-10-25 05:27:09 +00:00
2019-06-19 13:23:42 +00:00
- Время измерения метрики. Тип данных `DateTime` .
2017-10-25 05:27:09 +00:00
2019-06-19 13:23:42 +00:00
- Значение метрики. Тип данных: любой числовой.
2017-10-25 05:27:09 +00:00
2019-06-19 13:23:42 +00:00
- Версия метрики. Тип данных: любой числовой.
2017-10-25 05:27:09 +00:00
2019-01-18 16:07:48 +00:00
ClickHouse сохраняет строки с последней версией или последнюю записанную строку, если версии совпадают. Другие строки удаляются при слиянии кусков данных.
2017-10-25 05:27:09 +00:00
2019-01-18 16:07:48 +00:00
Имена этих столбцов должны быть заданы в конфигурации rollup.
2017-10-25 05:27:09 +00:00
2019-01-18 16:07:48 +00:00
**Параметры GraphiteMergeTree**
2017-10-25 05:27:09 +00:00
2019-01-18 16:07:48 +00:00
- `config_section` — имя раздела в конфигурационном файле, в котором находятся правила rollup.
2017-10-25 05:27:09 +00:00
2019-01-18 16:07:48 +00:00
**Секции запроса**
2017-10-25 05:27:09 +00:00
2019-06-19 13:23:42 +00:00
При создании таблицы `GraphiteMergeTree` используются те же [секции ](mergetree.md#table_engine-mergetree-creating-a-table ) запроса, что и при создании таблицы `MergeTree` .
2017-10-25 05:27:09 +00:00
2019-01-18 16:07:48 +00:00
< details markdown = "1" > < summary > Устаревший способ создания таблицы< / summary >
!!! attention
2019-06-19 13:23:42 +00:00
Н е используйте этот способ в новых проектах и по возможности переведите старые проекты на способ описанный выше.
2019-01-18 16:07:48 +00:00
```sql
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
EventDate Date,
Path String,
Time DateTime,
Value < Numeric_type > ,
Version < Numeric_type >
...
) ENGINE [=] GraphiteMergeTree(date-column [, sampling_expression], (primary, key), index_granularity, config_section)
2018-10-16 10:47:17 +00:00
```
2019-01-18 16:07:48 +00:00
В с е параметры, кроме `config_section` имеют то же значение, что в `MergeTree` .
- `config_section` — имя раздела в конфигурационном файле, в котором находятся правила rollup.
< / details >
2020-01-07 12:58:13 +00:00
## Конфигурация rollup {#rollup-configuration}
2019-01-18 16:07:48 +00:00
2019-06-19 13:23:42 +00:00
Настройки прореживания данных задаются параметром [graphite_rollup ](../server_settings/settings.md#server_settings-graphite_rollup ) в конфигурации сервера . Имя параметра может быть любым. Можно создать несколько конфигураций и использовать их для разных таблиц.
2019-01-18 16:07:48 +00:00
Структура конфигурации rollup:
2019-09-23 15:31:46 +00:00
```text
2019-01-18 16:07:48 +00:00
required-columns
2019-06-19 13:23:42 +00:00
patterns
```
2020-01-07 12:58:13 +00:00
### Требуемые столбцы (required-columns) {#required-columns}
2019-06-19 13:23:42 +00:00
- `path_column_name` — столбец, в котором хранится название метрики (сенсор Graphite). Значение по умолчанию: `Path` .
- `time_column_name` — столбец, в котором хранится время измерения метрики. Значение по умолчанию: `Time` .
- `value_column_name` — столбец с о значением метрики в момент времени, установленный в `time_column_name` . Значение по умолчанию: `Value` .
- `version_column_name` — столбец, в котором хранится версия метрики. Значение по умолчанию: `Timestamp` .
2020-01-07 12:58:13 +00:00
### Правила (patterns) {#patterns}
2019-06-19 13:23:42 +00:00
Структура раздела `patterns` :
2019-09-23 15:31:46 +00:00
```text
2019-02-20 16:16:46 +00:00
pattern
regexp
function
pattern
regexp
age + precision
...
2017-10-25 05:27:09 +00:00
pattern
regexp
function
2019-01-18 16:07:48 +00:00
age + precision
2017-10-25 05:27:09 +00:00
...
pattern
...
default
function
2019-01-18 16:07:48 +00:00
age + precision
2017-10-25 05:27:09 +00:00
...
```
2019-06-19 13:23:42 +00:00
!!! warning "Внимание"
Правила должны быть строго упорядочены:
2019-02-28 09:44:30 +00:00
2019-06-19 13:23:42 +00:00
1. Правила без `function` или `retention` .
1. Правила одновремено содержащие `function` и `retention` .
1. Правило `default` .
2019-02-28 09:44:30 +00:00
2019-06-19 13:23:42 +00:00
При обработке строки ClickHouse проверяет правила в разделе `pattern` . Каждый `pattern` (включая `default` ) может содержать параметр агрегации `function` , параметр `retention` , или о б а параметра одновременно. Если имя метрики соответствует шаблону `regexp` , то применяются правила `pattern` , в противном случае правило `default` .
2019-01-18 16:07:48 +00:00
2019-02-28 08:52:33 +00:00
Поля для разделов `pattern` и `default` :
2019-01-18 16:07:48 +00:00
- `regexp` – шаблон имени метрики.
- `age` – минимальный возраст данных в секундах.
2019-06-19 13:23:42 +00:00
- `precision` – точность определения возраста данных в секундах. Должен быть делителем для 86400 (количество секунд в сутках).
2019-01-18 16:07:48 +00:00
- `function` – имя агрегирующей функции, которую следует применить к данным, чей возраст оказался в интервале `[age, age + precision]` .
2017-10-25 05:27:09 +00:00
2020-01-07 12:58:13 +00:00
### Пример конфигурации {#configuration-example}
2017-10-25 05:27:09 +00:00
```xml
< graphite_rollup >
2019-01-18 16:07:48 +00:00
< version_column_name > Version< / version_column_name >
2017-10-25 05:27:09 +00:00
< pattern >
< regexp > click_cost< / regexp >
< function > any< / function >
< retention >
< age > 0< / age >
< precision > 5< / precision >
< / retention >
< retention >
< age > 86400< / age >
< precision > 60< / precision >
< / retention >
< / pattern >
< default >
< function > max< / function >
< retention >
< age > 0< / age >
< precision > 60< / precision >
< / retention >
< retention >
< age > 3600< / age >
< precision > 300< / precision >
< / retention >
< retention >
< age > 86400< / age >
< precision > 3600< / precision >
< / retention >
< / default >
< / graphite_rollup >
```
2018-10-16 10:47:17 +00:00
2020-01-30 10:34:55 +00:00
[Оригинальная статья ](https://clickhouse.tech/docs/ru/operations/table_engines/graphitemergetree/ ) <!--hide-->