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

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]Float64Float32 или Float64Значение, связанное с timestamp

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

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

Таблица 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

Таблица метрик

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

Таблица 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 в качестве аргумента: