Перейти к основному содержимому
Перейти к основному содержимому

ВремяСерийный Двигатель

Experimental feature. Learn more.
Not supported in ClickHouse Cloud

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

к сведению

Это экспериментальная функция, которая может измениться в несовместимых с предыдущими версиями способах в будущих релизах. Включите использование двигателя таблицы 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]Float64Float32 или Float64Значение, связанное с timestamp

Таблица тегов

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

Таблица tags должна иметь колонки:

ИмяОбязательно?Тип по умолчаниюВозможные типыОписание
id[x]UUIDлюбой (должен соответствовать типу id в таблице data)Идентификатор id идентифицирует комбинацию имени метрики и тегов. Выражение DEFAULT указывает, как вычислить такой идентификатор
metric_name[x]LowCardinality(String)String или LowCardinality(String)Имя метрики
<tag_value_column>[ ]StringString или 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]StringString или LowCardinality(String)Имя семейства метрик
type[x]StringString или LowCardinality(String)Тип семейства метрик, один из "counter", "gauge", "summary", "stateset", "histogram", "gaugehistogram"
unit[x]StringString или LowCardinality(String)Единица измерения в метрике
help[x]StringString или 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_columnsMapКарта, указывающая, какие теги должны быть помещены в отдельные колонки в таблице tags. Синтаксис: {'tag1': 'column1', 'tag2' : column2, ...}
use_all_tags_column_to_generate_idBooltrueПри генерации выражения для вычисления идентификатора временного ряда этот флаг позволяет использовать колонку all_tags в этом расчёте
store_min_time_and_max_timeBooltrueЕсли установить в true, таблица будет хранить min_time и max_time для каждого временного ряда
aggregate_min_time_and_max_timeBooltrueПри создании внутренней целевой таблицы tags этот флаг позволяет использовать SimpleAggregateFunction(min, Nullable(DateTime64(3))) вместо просто Nullable(DateTime64(3)) в качестве типа колонки min_time, и так же для колонки max_time
filter_by_min_time_and_max_timeBooltrueЕсли установить в true, таблица будет использовать колонки min_time и max_time для фильтрации временных рядов

Функции

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