Движок TimeSeries
Движок таблицы для хранения временных рядов, т.е. набора значений, связанных с временными отметками и тегами (или метками):
Это экспериментальная функция, которая может изменяться несовместимыми способами в будущих релизах.
Включите использование движка таблицы TimeSeries с настройкой allow_experimental_time_series_table.
Введите команду set allow_experimental_time_series_table = 1
.
Синтаксис
Использование
Проще всего начать с настройки по умолчанию (разрешено создавать таблицу TimeSeries
без указания списка колонок):
После этого эту таблицу можно использовать с следующими протоколами (порт должен быть назначен в конфигурации сервера):
Целевые таблицы
Таблица TimeSeries
не содержит собственных данных, все данные хранятся в целевых таблицах.
Это похоже на работу материализованного представления,
с той разницей, что у материализованного представления есть одна целевая таблица, в то время как у таблицы TimeSeries
три целевые таблицы, именуемые data, tags и metrics.
Целевые таблицы могут быть явно указаны в запросе CREATE TABLE
или движок таблицы TimeSeries
может автоматически создать внутренние целевые таблицы.
Целевые таблицы следующие:
Таблица данных
Таблица данных содержит временные ряды, связанные с некоторым идентификатором.
Таблица данных должна иметь колонки:
Имя | Обязательная? | Тип по умолчанию | Возможные типы | Описание |
---|---|---|---|---|
id | [x] | UUID | любой | Идентифицирует комбинацию названия метрики и тегов |
timestamp | [x] | DateTime64(3) | DateTime64(X) | Временная метка |
value | [x] | Float64 | Float32 или Float64 | Значение, связанное с timestamp |
Таблица тегов
Таблица тегов содержит идентификаторы, рассчитанные для каждой комбинации названия метрики и тегов.
Таблица тегов должна иметь колонки:
Имя | Обязательная? | Тип по умолчанию | Возможные типы | Описание |
---|---|---|---|---|
id | [x] | UUID | любой (должен соответствовать типу id в таблице data) | Идентификатор id идентифицирует комбинацию названия метрики и тегов. Выражение по умолчанию указывает, как вычислять такой идентификатор |
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 |
Таблица метрик
Таблица метрик содержит некоторую информацию о собираемых метриках, их типах и описаниях.
Таблица метрик должна иметь колонки:
Имя | Обязательная? | Тип по умолчанию | Возможные типы | Описание |
---|---|---|---|---|
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
содержит идентификаторы, каждый идентификатор рассчитывается для комбинации названия метрики и тегов.
Выражение по умолчанию для колонки 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
в качестве аргумента: