ВремяСерийный Двигатель
Двигатель таблицы, хранящий временные ряды, т.е. набор значений, связанных с отметками времени и тегами (или метками):
Это экспериментальная функция, которая может измениться в несовместимых с предыдущими версиями способах в будущих релизах.
Включите использование двигателя таблицы TimeSeries
с помощью настройки allow_experimental_time_series_table.
Введите команду set allow_experimental_time_series_table = 1
.
Синтаксис
Использование
Проще всего начать с настройки всего по умолчанию (разрешено создавать таблицу TimeSeries
без указания списка колонок):
Затем эту таблицу можно использовать с следующими протоколами (порт должен быть назначен в конфигурации сервера):
Целевые таблицы
Таблица TimeSeries
не имеет собственных данных, все хранится в её целевых таблицах.
Это похоже на работу материализованного представления,
с разницей в том, что у материализованного представления есть одна целевая таблица,
в то время как у таблицы TimeSeries
три целевые таблицы, названные data, tags и metrics.
Целевые таблицы можно либо явно указать в запросе CREATE TABLE
,
либо движок таблицы TimeSeries
может автоматически сгенерировать внутренние целевые таблицы.
Целевые таблицы следующие:
Таблица данных
tabel содержит временные ряды, связанные с некоторым идентификатором.
Таблица data должна иметь колонки:
Имя | Обязательно? | Тип по умолчанию | Возможные типы | Описание |
---|---|---|---|---|
id | [x] | UUID | любой | Идентифицирует комбинацию имен метрик и тегов |
timestamp | [x] | DateTime64(3) | DateTime64(X) | Временная точка |
value | [x] | Float64 | Float32 или Float64 | Значение, связанное с timestamp |
Таблица тегов
tabel содержит идентификаторы, вычисляемые для каждой комбинации имени метрики и тегов.
Таблица tags должна иметь колонки:
Имя | Обязательно? | Тип по умолчанию | Возможные типы | Описание |
---|---|---|---|---|
id | [x] | UUID | любой (должен соответствовать типу id в таблице data) | Идентификатор id идентифицирует комбинацию имени метрики и тегов. Выражение DEFAULT указывает, как вычислить такой идентификатор |
metric_name | [x] | LowCardinality(String) | String или LowCardinality(String) | Имя метрики |
<tag_value_column> | [ ] | String | String или LowCardinality(String) или LowCardinality(Nullable(String)) | Значение конкретного тега, имя тега и название соответствующей колонки указываются в настройке tags_to_columns |
tags | [x] | Map(LowCardinality(String), String) | Map(String, String) или Map(LowCardinality(String), String) или Map(LowCardinality(String), LowCardinality(String)) | Карта тегов, исключая тег __name__ , содержащий имя метрики и исключая теги с именами, перечисленными в настройке tags_to_columns |
all_tags | [ ] | Map(String, String) | Map(String, String) или Map(LowCardinality(String), String) или Map(LowCardinality(String), LowCardinality(String)) | Эфемерная колонка, каждая строка - это карта всех тегов, исключая только тег __name__ , содержащий имя метрики. Единственная цель этой колонки - использоваться при вычислении id |
min_time | [ ] | Nullable(DateTime64(3)) | DateTime64(X) или Nullable(DateTime64(X)) | Минимальная отметка времени временных рядов с этим id . Колонка создаётся, если store_min_time_and_max_time равно true |
max_time | [ ] | Nullable(DateTime64(3)) | DateTime64(X) или Nullable(DateTime64(X)) | Максимальная отметка времени временных рядов с этим id . Колонка создаётся, если store_min_time_and_max_time равно true |
Таблица метрик
tabel содержит некоторую информацию о собираемых метриках, типах этих метрик и их описаниях.
Таблица 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, tags, metrics.
Создание
Существует несколько способов создать таблицу с движком таблицы TimeSeries
.
Самое простое выражение
фактически создаст следующую таблицу (вы можете это увидеть, выполнив SHOW CREATE TABLE my_table
):
Таким образом, колонки были сгенерированы автоматически, также в этом выражении есть три внутренних UUID - по одному для каждой внутренней целевой таблицы, которая была создана. (Внутренние UUID обычно не отображаются, пока не установлено 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
:
Настройка типов колонок
Вы можете настроить типы почти любой колонки внутренних целевых таблиц, указывая их явно при определении основной таблицы. Например,
сделает так, что внутренняя таблица data будет хранить временную метку в микросекундах вместо миллисекунд:
Колонка id
Колонка id
содержит идентификаторы, каждый идентификатор вычисляется для комбинации имени метрики и тегов.
Выражение DEFAULT для колонки id
- это выражение, которое будет использоваться для вычисления таких идентификаторов.
Как тип колонки id
, так и это выражение можно настроить, указав их явно:
Колонки tags
и all_tags
Существуют две колонки, содержащие карты тегов - tags
и all_tags
. В этом примере они означают одно и то же, однако они могут отличаться,
если используется настройка tags_to_columns
. Эта настройка позволяет указать, что конкретный тег должен храниться в отдельной колонке, вместо хранения
в карте внутри колонки tags
:
Это выражение добавит колонки
в определение как my_table
, так и её цели внутренней таблицы tags. В этом случае колонка tags
не будет содержать теги instance
и job
,
но колонка all_tags
будет содержать их. Колонка all_tags
эфемерна и её единственная цель - использоваться в выражении DEFAULT
для колонки id
.
Типы колонок могут быть настроены, указав их явно:
Движки таблиц внутренних целевых таблиц
По умолчанию внутренние целевые таблицы используют следующие движки таблиц:
- таблица data использует MergeTree;
- таблица tags использует AggregatingMergeTree, потому что одни и те же данные часто вставляются несколько раз в эту таблицу, поэтому нам нужен способ
для удаления дубликатов, а также это необходимо сделать агрегацию для колонок
min_time
иmax_time
; - таблица metrics использует ReplacingMergeTree, потому что одни и те же данные часто вставляются несколько раз в эту таблицу, поэтому нам нужен способ для удаления дубликатов.
Другие движки таблиц также могут быть использованы для внутренних целевых таблиц, если это указано таким образом:
Внешние целевые таблицы
Возможно сделать так, чтобы таблица TimeSeries
использовала вручную созданную таблицу:
Настройки
Вот список настроек, которые можно указать при определении таблицы TimeSeries
:
Имя | Тип | По умолчанию | Описание |
---|---|---|---|
tags_to_columns | Map | Карта, указывающая, какие теги должны быть помещены в отдельные колонки в таблице tags. Синтаксис: {'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
в качестве аргумента: