> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Движок таблицы, хранящий временные ряды, то есть набор значений, связанных с временными метками и тегами (или метками).

# Функции

export const CloudNotSupportedBadge = () => {
  return <div className="cloudNotSupportedBadge">
            <div className="cloudNotSupportedIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.5" d="M6.33366 12.6666L12.3739 12.6667C13.6593 12.6667 14.7073 11.6187 14.7073 10.3334C14.7073 9.04804 13.6593 8.00003 12.3739 8.00003C12.3739 8.00003 12.3337 7.66659 12.0003 7.33325M10.667 5.33322C8.00033 2.33325 4.45395 4.78537 4.14195 6.68203C2.55728 6.7627 1.29395 8.06203 1.29395 9.6667C1.29395 11.3234 2.66699 12.6666 4.00033 12.6666" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.5" d="M2.66699 14L12.0003 4.66663" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>

        </div>
            Not supported in ClickHouse Cloud
        </div>;
};

export const ExperimentalBadge = () => {
  return <div className="experimentalBadge">
            <div className="experimentalIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.25" d="M5.5 2H10.5" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M9.50015 2V6.19625L13.4283 12.7425C13.4738 12.8183 13.4985 12.9049 13.4996 12.9934C13.5008 13.0818 13.4785 13.169 13.435 13.246C13.3914 13.323 13.3283 13.3871 13.2519 13.4317C13.1755 13.4764 13.0886 13.4999 13.0002 13.5H3.00015C2.91164 13.5 2.8247 13.4766 2.74822 13.432C2.67174 13.3874 2.60847 13.3233 2.56487 13.2463C2.52126 13.1693 2.49889 13.082 2.50004 12.9935C2.50119 12.905 2.52582 12.8184 2.5714 12.7425L6.50015 6.19625V2" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M4.47656 9.56754C5.30344 9.41254 6.47656 9.47942 7.99969 10.25C10.0153 11.2707 11.4216 11.0569 12.2184 10.7282" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
        </div>
            Experimental feature. <u><a href="/docs/beta-and-experimental-features#experimental-features">Learn more.</a></u>
        </div>;
};

Движок таблицы для хранения временных рядов, то есть набора значений, связанных с временными метками и тегами (или метками):

```sql theme={null}
metric_name1[tag1=value1, tag2=value2, ...] = {timestamp1: value1, timestamp2: value2, ...}
metric_name2[...] = ...
```

<Info>
  Это экспериментальная возможность, которая в будущих релизах может измениться с нарушением обратной совместимости.
  Включите использование движка таблицы TimeSeries
  с помощью настройки [allow\_experimental\_time\_series\_table](/ru/reference/settings/session-settings#allow_experimental_time_series_table).
  Введите команду `set allow_experimental_time_series_table = 1`.
</Info>

<div id="syntax">
  ## Синтаксис
</div>

```sql theme={null}
CREATE TABLE name [(columns)] ENGINE=TimeSeries
[SETTINGS var1=value1, ...]
[DATA db.data_table_name | DATA ENGINE data_table_engine(arguments)]
[TAGS db.tags_table_name | TAGS ENGINE tags_table_engine(arguments)]
[METRICS db.metrics_table_name | METRICS ENGINE metrics_table_engine(arguments)]
```

<div id="usage">
  ## Использование
</div>

Проще начать с параметров по умолчанию (таблицу `TimeSeries` можно создать, не указывая список столбцов):

```sql theme={null}
CREATE TABLE my_table ENGINE=TimeSeries
```

Затем эту таблицу можно использовать со следующими протоколами (в конфигурации сервера должен быть назначен порт):

* [prometheus remote-write](/ru/concepts/features/interfaces/prometheus#remote-write)
* [prometheus remote-read](/ru/concepts/features/interfaces/prometheus#remote-read)

<div id="target-tables">
  ## Целевые таблицы
</div>

У таблицы `TimeSeries` нет собственных данных — всё хранится в её целевых таблицах.
Это похоже на то, как работает [materialized view](/ru/reference/statements/create/view#materialized-view),
с той разницей, что у materialized view одна целевая таблица,
тогда как у таблицы `TimeSeries` их три: [данные](#data-table), [tags](#tags-table) и [metrics](#metrics-table).

Целевые таблицы можно либо явно указать в запросе `CREATE TABLE`,
либо движок таблицы `TimeSeries` может автоматически сгенерировать внутренние целевые таблицы.

Целевые таблицы бывают следующими:

<div id="data-table">
  ### Таблица *data*
</div>

Таблица *data* содержит временные ряды, связанные с определённым идентификатором.

Таблица *data* должна содержать следующие столбцы:

| Имя         | Обязательно? | Тип по умолчанию | Возможные типы          | Описание                                        |
| ----------- | ------------ | ---------------- | ----------------------- | ----------------------------------------------- |
| `id`        | \[x]         | `UUID`           | любой                   | Идентифицирует комбинацию имени метрики и тегов |
| `timestamp` | \[x]         | `DateTime64(3)`  | `DateTime64(X)`         | Момент времени                                  |
| `value`     | \[x]         | `Float64`        | `Float32` или `Float64` | Значение, связанное с `timestamp`               |

<div id="tags-table">
  ### Таблица tags
</div>

Таблица *tags* содержит идентификаторы, вычисляемые для каждой комбинации имени метрики и тегов.

Таблица *tags* должна содержать следующие столбцы:

| Имя                  | Обязательный? | Тип по умолчанию                      | Возможные типы                                                                                                          | Описание                                                                                                                                                                         |
| -------------------- | ------------- | ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`                 | \[x]          | `UUID`                                | any (must match the type of `id` in the [данные](#data-table) table)                                                    | `id` идентифицирует комбинацию имени метрики и тегов. Выражение DEFAULT задаёт способ вычисления такого идентификатора                                                           |
| `metric_name`        | \[x]          | `LowCardinality(String)`              | `String` or `LowCardinality(String)`                                                                                    | Имя метрики                                                                                                                                                                      |
| `<tag_value_column>` | \[ ]          | `String`                              | `String` or `LowCardinality(String)` or `LowCardinality(Nullable(String))`                                              | Значение конкретного тега; имя тега и имя соответствующего столбца задаются в настройке [tags\_to\_columns](#settings)                                                           |
| `tags`               | \[x]          | `Map(LowCardinality(String), String)` | `Map(String, String)` or `Map(LowCardinality(String), String)` or `Map(LowCardinality(String), LowCardinality(String))` | Карта тегов, за исключением тега `__name__`, содержащего имя метрики, а также тегов с именами, перечисленными в настройке [tags\_to\_columns](#settings)                         |
| `all_tags`           | \[ ]          | `Map(String, String)`                 | `Map(String, String)` or `Map(LowCardinality(String), String)` or `Map(LowCardinality(String), LowCardinality(String))` | Эфемерный столбец: каждая строка содержит карту всех тегов, за исключением только тега `__name__`, содержащего имя метрики. Этот столбец используется только при вычислении `id` |
| `min_time`           | \[ ]          | `Nullable(DateTime64(3))`             | `DateTime64(X)` or `Nullable(DateTime64(X))`                                                                            | Минимальная временная метка временного ряда с данным `id`. Столбец создаётся, если [store\_min\_time\_and\_max\_time](#settings) имеет значение `true`                           |
| `max_time`           | \[ ]          | `Nullable(DateTime64(3))`             | `DateTime64(X)` or `Nullable(DateTime64(X))`                                                                            | Максимальная временная метка временного ряда с данным `id`. Столбец создаётся, если [store\_min\_time\_and\_max\_time](#settings) имеет значение `true`                          |

<div id="metrics-table">
  ### Таблица metrics
</div>

Таблица *metrics* содержит информацию о собираемых метриках, их типах и описаниях.

Таблица *metrics* должна иметь следующие столбцы:

| Имя                  | Обязательный? | Тип по умолчанию | Возможные типы                        | Описание                                                                                               |
| -------------------- | ------------- | ---------------- | ------------------------------------- | ------------------------------------------------------------------------------------------------------ |
| `metric_family_name` | \[x]          | `String`         | `String` или `LowCardinality(String)` | Имя семейства метрик                                                                                   |
| `type`               | \[x]          | `String`         | `String` или `LowCardinality(String)` | Тип семейства метрик: один из "counter", "gauge", "summary", "stateset", "histogram", "gaugehistogram" |
| `unit`               | \[x]          | `String`         | `String` или `LowCardinality(String)` | Единица измерения, используемая в метрике                                                              |
| `help`               | \[x]          | `String`         | `String` или `LowCardinality(String)` | Описание метрики                                                                                       |

Любая строка, вставленная в таблицу `TimeSeries`, фактически будет сохранена в этих трёх целевых таблицах.
Таблица `TimeSeries` содержит все эти столбцы из таблиц [данных](#data-table), [tags](#tags-table), [metrics](#metrics-table).

<div id="creation">
  ## Создание
</div>

Таблицу с движком таблицы `TimeSeries` можно создать несколькими способами.
Самый простой оператор

```sql theme={null}
CREATE TABLE my_table ENGINE=TimeSeries
```

в результате будет создана следующая таблица (это можно увидеть, выполнив `SHOW CREATE TABLE my_table`):

```sql theme={null}
CREATE TABLE my_table
(
    `id` UUID DEFAULT reinterpretAsUUID(sipHash128(metric_name, all_tags)),
    `timestamp` DateTime64(3),
    `value` Float64,
    `metric_name` LowCardinality(String),
    `tags` Map(LowCardinality(String), String),
    `all_tags` Map(String, String),
    `min_time` Nullable(DateTime64(3)),
    `max_time` Nullable(DateTime64(3)),
    `metric_family_name` String,
    `type` String,
    `unit` String,
    `help` String
)
ENGINE = TimeSeries
DATA ENGINE = MergeTree ORDER BY (id, timestamp)
DATA INNER UUID '01234567-89ab-cdef-0123-456789abcdef'
TAGS ENGINE = AggregatingMergeTree PRIMARY KEY metric_name ORDER BY (metric_name, id)
TAGS INNER UUID '01234567-89ab-cdef-0123-456789abcdef'
METRICS ENGINE = ReplacingMergeTree ORDER BY metric_family_name
METRICS INNER UUID '01234567-89ab-cdef-0123-456789abcdef'
```

Итак, столбцы были сгенерированы автоматически, и в этом операторе также есть три внутренних UUID —
по одному для каждой созданной внутренней целевой таблицы.
(Внутренние UUID обычно не отображаются, пока не задан параметр
[show\_table\_uuid\_in\_table\_create\_query\_if\_not\_nil](/ru/reference/settings/session-settings#show_table_uuid_in_table_create_query_if_not_nil)
.)

Внутренние целевые таблицы имеют имена вида `.inner_id.data.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`,
`.inner_id.tags.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`, `.inner_id.metrics.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`,
и каждая целевая таблица содержит столбцы, представляющие собой подмножество столбцов основной таблицы `TimeSeries`:

```sql theme={null}
CREATE TABLE default.`.inner_id.data.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`
(
    `id` UUID,
    `timestamp` DateTime64(3),
    `value` Float64
)
ENGINE = MergeTree
ORDER BY (id, timestamp)
```

```sql theme={null}
CREATE TABLE default.`.inner_id.tags.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`
(
    `id` UUID DEFAULT reinterpretAsUUID(sipHash128(metric_name, all_tags)),
    `metric_name` LowCardinality(String),
    `tags` Map(LowCardinality(String), String),
    `all_tags` Map(String, String) EPHEMERAL,
    `min_time` SimpleAggregateFunction(min, Nullable(DateTime64(3))),
    `max_time` SimpleAggregateFunction(max, Nullable(DateTime64(3)))
)
ENGINE = AggregatingMergeTree
PRIMARY KEY metric_name
ORDER BY (metric_name, id)
```

```sql theme={null}
CREATE TABLE default.`.inner_id.metrics.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`
(
    `metric_family_name` String,
    `type` String,
    `unit` String,
    `help` String
)
ENGINE = ReplacingMergeTree
ORDER BY metric_family_name
```

<div id="adjusting-column-types">
  ## Настройка типов столбцов
</div>

Вы можете изменить типы почти любых столбцов во внутренних целевых таблицах, явно
указав их при определении основной таблицы. Например,

```sql theme={null}
CREATE TABLE my_table
(
    timestamp DateTime64(6)
) ENGINE=TimeSeries
```

приведёт к тому, что внутренняя таблица [данные](#data-table) будет хранить временную метку в микросекундах вместо миллисекунд:

```sql theme={null}
CREATE TABLE default.`.inner_id.data.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`
(
    `id` UUID,
    `timestamp` DateTime64(6),
    `value` Float64
)
ENGINE = MergeTree
ORDER BY (id, timestamp)
```

<div id="id-column">
  ## Столбец `id`
</div>

Столбец `id` содержит идентификаторы; каждый идентификатор вычисляется для комбинации имени метрики и тегов.
Выражение DEFAULT для столбца `id` используется для вычисления таких идентификаторов.
Как тип столбца `id`, так и это выражение можно настроить, явно указав их:

```sql theme={null}
CREATE TABLE my_table
(
  id UInt64 DEFAULT sipHash64(metric_name, all_tags)
)
ENGINE=TimeSeries
```

<div id="tags-and-all-tags">
  ## Столбцы `tags` и `all_tags`
</div>

Есть два столбца, содержащих карты тегов, — `tags` и `all_tags`. В этом примере они означают одно и то же, однако могут различаться,
если используется настройка `tags_to_columns`. Эта настройка позволяет указать, что определённый тег следует хранить в отдельном столбце, а не
в карте внутри столбца `tags`:

```sql theme={null}
CREATE TABLE my_table
ENGINE = TimeSeries 
SETTINGS tags_to_columns = {'instance': 'instance', 'job': 'job'}
```

Этот оператор добавит столбцы:

```sql theme={null}
`instance` String,
`job` String
```

к определениям как `my_table`, так и её внутренней целевой [таблицы `tags`](#tags-table). В этом случае столбец `tags` не будет содержать теги `instance` и `job`,
но столбец `all_tags` будет их содержать. Столбец `all_tags` является эфемерным, и его единственное назначение — использоваться в выражении DEFAULT
для столбца `id`.

Типы столбцов можно изменить, явно указав их:

```sql theme={null}
CREATE TABLE my_table (
  instance LowCardinality(String),
  job LowCardinality(Nullable(String))
)
ENGINE=TimeSeries
SETTINGS tags_to_columns = {'instance': 'instance', 'job': 'job'}
```

<div id="inner-table-engines">
  ## Движки внутренних целевых таблиц
</div>

По умолчанию внутренние целевые таблицы используют следующие движки таблиц:

* таблица [данные](#data-table) использует [MergeTree](/ru/reference/engines/table-engines/mergetree-family/mergetree);
* таблица [tags](#tags-table) использует [AggregatingMergeTree](/ru/reference/engines/table-engines/mergetree-family/aggregatingmergetree), поскольку одни и те же данные часто вставляются в эту таблицу несколько раз, поэтому необходим способ
  удалять дубликаты, а также потому, что для столбцов `min_time` и `max_time` требуется выполнять агрегацию;
* таблица [metrics](#metrics-table) использует [ReplacingMergeTree](/ru/reference/engines/table-engines/mergetree-family/replacingmergetree), поскольку одни и те же данные часто вставляются в эту таблицу несколько раз, поэтому необходим способ
  удалять дубликаты.

Для внутренних целевых таблиц также можно использовать другие движки таблиц, если это указано:

```sql theme={null}
CREATE TABLE my_table ENGINE=TimeSeries
DATA ENGINE=ReplicatedMergeTree
TAGS ENGINE=ReplicatedAggregatingMergeTree
METRICS ENGINE=ReplicatedReplacingMergeTree
```

<div id="external-target-tables">
  ## Внешние целевые таблицы
</div>

Можно настроить таблицу `TimeSeries` так, чтобы она использовала таблицу, созданную вручную:

```sql theme={null}
CREATE TABLE data_for_my_table
(
    `id` UUID,
    `timestamp` DateTime64(3),
    `value` Float64
)
ENGINE = MergeTree
ORDER BY (id, timestamp);

CREATE TABLE tags_for_my_table ...

CREATE TABLE metrics_for_my_table ...

CREATE TABLE my_table ENGINE=TimeSeries DATA data_for_my_table TAGS tags_for_my_table METRICS metrics_for_my_table;
```

<div id="settings">
  ## Настройки
</div>

Ниже приведён список настроек, которые можно указать при определении таблицы `TimeSeries`:

| Имя                                  | Тип  | По умолчанию | Описание                                                                                                                                                                                                                                                         |
| ------------------------------------ | ---- | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `tags_to_columns`                    | Map  | {}           | Map, задающий, какие теги следует вынести в отдельные столбцы таблицы [tags](#tags-table). Синтаксис: `{'tag1': 'column1', 'tag2' : column2, ...}`                                                                                                               |
| `use_all_tags_column_to_generate_id` | Bool | true         | При формировании выражения для вычисления идентификатора временного ряда этот флаг включает использование в вычислении столбца `all_tags`                                                                                                                        |
| `store_min_time_and_max_time`        | Bool | true         | Если установлено значение true, таблица будет хранить `min_time` и `max_time` для каждого временного ряда                                                                                                                                                        |
| `aggregate_min_time_and_max_time`    | Bool | true         | При создании внутренней целевой таблицы `tags` этот флаг включает использование `SimpleAggregateFunction(min, Nullable(DateTime64(3)))` вместо просто `Nullable(DateTime64(3))` в качестве типа столбца `min_time`; то же самое относится и к столбцу `max_time` |
| `filter_by_min_time_and_max_time`    | Bool | true         | Если установлено значение true, таблица будет использовать столбцы `min_time` и `max_time` для фильтрации временных рядов                                                                                                                                        |

Ниже приведён список функций, поддерживающих таблицу `TimeSeries` в качестве аргумента:

* [timeSeriesData](/ru/reference/functions/table-functions/timeSeriesData)
* [timeSeriesTags](/ru/reference/functions/table-functions/timeSeriesTags)
* [timeSeriesMetrics](/ru/reference/functions/table-functions/timeSeriesMetrics)
