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