Skip to main content

Базы данных

Система ЛиманИСУ 2.0 использует две СУБД:

  • PostgreSQL 14 -- реляционная СУБД для хранения конфигурационных данных, справочников и управления пользователями
  • ClickHouse 24.2.1 -- колонковая СУБД для хранения и анализа телеметрических данных

Обзор схем

СУБДСхемаНазначение
PostgreSQLlisuОсновная схема: пользователи, роли, дерево объектов, измерительные точки, журналы
PostgreSQLdefects_reference_bookСправочник типов дефектов оборудования
PostgreSQLbearing_reference_bookСправочник подшипников качения
ClickHousedefaultТелеметрия, события, дефекты, прогнозы, тренды

PostgreSQL -- схема lisu

Основная схема системы. Содержит данные о пользователях, иерархии объектов, измерительных точках, журналах событий и техобслуживания.

users -- Пользователи

Хранение учетных записей пользователей системы.

ПолеТипPK/FKОписание
idBIGINTPKУникальный идентификатор пользователя
lastnameVARCHAR(60)Фамилия
nameVARCHAR(60)Имя
patronymicVARCHARОтчество
usernameVARCHARЛогин для входа
passwordVARCHARХэш пароля
emailVARCHAREmail
phoneVARCHAR(20)Номер телефона
positionVARCHARДолжность
email_notificationBOOLEANВключена ли email-нотификация (по умолчанию false)
sms_notificationBOOLEANВключена ли SMS-нотификация (по умолчанию false)
verifiedBOOLEANПодтверждена ли учетная запись (по умолчанию false)
activeBOOLEANАктивен ли пользователь (по умолчанию false)
time_zoneVARCHAR(20)Часовой пояс
langSMALLINTЯзык интерфейса (по умолчанию 0)
createdTIMESTAMPДата и время регистрации
password_exp_dateTIMESTAMPДата истечения срока действия пароля
type_notificationJSONBТипы оповещений (гибкая структура)
active_sending_reportsBOOLEANОтправлять ли отчеты (по умолчанию false)
period_sending_reportsINTEGERПериод отправки отчетов в днях (по умолчанию 1)
last_sending_reportsTIMESTAMPДата последней отправки отчета

Связи:

  • user_role (многие-ко-многим): пользователь может иметь несколько ролей (ON DELETE CASCADE)
  • user_hash_history (один-ко-многим): история паролей (ON DELETE CASCADE)
  • journal (один-ко-многим): события аудита
  • permission (один-ко-многим): права доступа к объектам дерева (ON DELETE CASCADE)

Триггеры:

  • after_create_password_trigger -- при создании пользователя добавляет хэш пароля в историю
  • after_update_password_trigger -- при смене пароля добавляет новый хэш в историю (если не дублируется)

role -- Роли

Хранение ролей пользователей (например, "Администратор", "Инженер").

ПолеТипPK/FKОписание
idBIGINTPKИдентификатор роли
nameVARCHAR(25)Название роли (уникальное)
descriptionVARCHAR(255)Описание роли

user_role -- Связь пользователей и ролей

Реализует связь "многие-ко-многим" между пользователями и ролями.

ПолеТипPK/FKОписание
user_idBIGINTPK, FK -> users.idИдентификатор пользователя
role_idBIGINTPK, FK -> role.idИдентификатор роли

tree -- Древовидная структура объектов

Иерархическое представление объектов: локации, узлы, оборудование.

ПолеТипPK/FKОписание
idBIGINTPKИдентификатор узла
pathLTREEПуть в иерархии (например, 1.5.12)
typetree_type (ENUM)Тип объекта: LOCATION, UNIT, EQUIPMENT, NODE
nameVARCHARИмя объекта
descriptionVARCHARОписание
mnemoJSONBМнемосхема оборудования
attributesJSONBМетаданные узла
unit_dataJSONBДоп. данные (двигатель с подшипниками)
createdTIMESTAMPДата создания
mode_workJSONBРежимы работы оборудования
diagnosticsJSONBДиагностические параметры
last_repairTIMESTAMPДата последнего ремонта
Расширение ltree

Используется расширение PostgreSQL ltree для работы с иерархией. Триггер tree_insert_trigger автоматически заполняет поле path при вставке. Индексы: path_idx (btree), path_gist_idx (gist) для быстрого поиска.

Пример unit_data (насос с подшипниками):

{
"id": 155,
"name": "Насос",
"type": "EQUIPMENT",
"path": "5.89.151.152.155",
"equipmentType": "pump",
"bearingsType": "rolling",
"pumps": [
{
"count": "3",
"title": "Плунжер",
"bearings": [
{
"id": 18293,
"model": "3640",
"company": "GPZ",
"companyModel": "GPZ 3640",
"innerRing": "8.18",
"outerRing": "7.82",
"separator": "0.49",
"rollingElements": "5.96"
}
]
}
]
}

Пример mode_work (режимы работы):

{
"data": [
{
"id": "90d9e4ee-f30c-4f15-bb00-a2c0159a95f4",
"name": "Выключен",
"conditionModeWork": [
{
"id": "f121221f-f279-4cc7-8f3b-1faf8f795901",
"value": "1",
"condition": "<",
"parameter": "revolutions_per_minute",
"measurmentPoint": 267
}
]
}
]
}

data_hub -- Датахабы

Источники данных (MQTT-брокеры, API и т.п.).

ПолеТипPK/FKОписание
idBIGINTPKИдентификатор
nameVARCHARUNIQUEУникальное название
urlVARCHARUNIQUEАдрес подключения (IP:порт или DNS)
usernameVARCHARЛогин для подключения
passwordVARCHARПароль для подключения
activeBOOLEANАктивен ли источник (по умолчанию false)
createdTIMESTAMPДата создания

Связи: telemetry_node (один-ко-многим) -- один DataHub обслуживает множество точек (без каскадного удаления).


telemetry_type -- Типы источников телеметрии

ПолеТипPK/FKОписание
idBIGINTPKИдентификатор типа
nameVARCHAR(100)UNIQUEНазвание типа
parse_topicVARCHAR(6)Тип парсера: JSON, String, Bool, Float, Int

telemetry_node -- Измерительные точки

Конкретные источники телеметрии (датчики, устройства), привязанные к объектам дерева.

ПолеТипPK/FKОписание
idBIGINTPKИдентификатор точки
nameVARCHAR(255)Название
topicVARCHAR(255)MQTT/другой топик
telemetry_type_idBIGINTFK -> telemetry_type.idТип источника данных
data_hub_idBIGINTFK -> data_hub.idИсточник данных
tree_idBIGINTFK -> tree.idОбъект в дереве (ON DELETE CASCADE)
createdTIMESTAMPДата создания

stick_name -- Параметры измерительной точки

Конкретные параметры ("температура", "давление") для конкретной измерительной точки.

ПолеТипPK/FKОписание
idBIGINTPKИдентификатор параметра
nameVARCHARНазвание параметра
aliasVARCHARПсевдоним
unitVARCHARЕдиница измерения
precitionINTEGERТочность отображения (по умолчанию 2)
telemetry_node_idBIGINTFK -> telemetry_node.idИзмерительная точка (ON DELETE CASCADE)

stick_name_ref -- Справочник параметров

Шаблонные параметры, используемые при создании новых точек.

ПолеТипPK/FKОписание
idBIGINTPKИдентификатор параметра
nameVARCHARНазвание
aliasVARCHARПсевдоним
unitVARCHARЕдиница измерения
precitionINTEGERТочность (по умолчанию 2)

PostgreSQL -- схема defects_reference_book

defect -- Справочник типов дефектов

Хранение шаблонов дефектов оборудования с диагностическими параметрами и рекомендациями по устранению.

ПолеТип данныхDEFAULT / NOT NULLОписание
idUUIDNOT NULLУникальный идентификатор дефекта
nameVARCHARNOT NULLНазвание дефекта (например, "Подшипник: Внешнее кольцо")
keyVARCHARNOT NULLУникальный ключ дефекта (например, BPFO)
group_keyVARCHAR--Ключ группы дефектов
group_nameVARCHAR--Название группы дефектов
recommendations_weakVARCHAR--Рекомендации при слабом проявлении дефекта
recommendations_averageVARCHAR--Рекомендации при среднем проявлении
recommendations_strongVARCHAR--Рекомендации при сильном проявлении
default_spectrum_weakDOUBLE PRECISIONNOT NULLПороговое значение в спектре для слабого дефекта
default_spectrum_mediumDOUBLE PRECISIONNOT NULLПороговое значение в спектре для среднего дефекта
default_spectrum_strongDOUBLE PRECISIONNOT NULLПороговое значение в спектре для сильного дефекта
default_envelope_weakDOUBLE PRECISIONDEFAULT 4 NOT NULLПороговое значение в огибающей для слабого дефекта
default_envelope_mediumDOUBLE PRECISIONDEFAULT 8 NOT NULLПороговое значение в огибающей для среднего дефекта
default_envelope_strongDOUBLE PRECISIONNOT NULLПороговое значение в огибающей для сильного дефекта
default_spectrum_template_weakDOUBLE PRECISIONDEFAULT 10 NOT NULLПорог шаблона спектра для слабого дефекта
default_spectrum_template_mediumDOUBLE PRECISIONDEFAULT 20 NOT NULLПорог шаблона спектра для среднего дефекта
default_spectrum_template_strongDOUBLE PRECISIONDEFAULT 30 NOT NULLПорог шаблона спектра для сильного дефекта
diagnosticJSON--Дополнительные диагностические параметры в формате JSON

Индексы: ix_defect_id (btree по id), ix_defect_name (btree по name)


defectequipmentmode -- Настройки дефектов под оборудование и режим

Хранение персонализированных пороговых значений дефектов для конкретного оборудования и режима работы.

ПолеТип данныхDEFAULT / NOT NULLОписание
idUUIDNOT NULLУникальный идентификатор записи
defect_idUUIDNOT NULL, FK -> defect.idСсылка на тип дефекта
equipment_idINTEGERNOT NULLИдентификатор оборудования
mode_idVARCHAR--Идентификатор режима работы
spectrum_weakDOUBLE PRECISIONNOT NULLПорог в спектре для слабого дефекта
spectrum_mediumDOUBLE PRECISIONNOT NULLПорог в спектре для среднего дефекта
spectrum_strongDOUBLE PRECISIONNOT NULLПорог в спектре для сильного дефекта
envelope_weakDOUBLE PRECISIONDEFAULT 4Порог в огибающей для слабого дефекта
envelope_mediumDOUBLE PRECISIONDEFAULT 8Порог в огибающей для среднего дефекта
envelope_strongDOUBLE PRECISIONNOT NULLПорог в огибающей для сильного дефекта
spectrum_template_weakDOUBLE PRECISIONDEFAULT 10 NOT NULLПорог шаблона спектра для слабого дефекта
spectrum_template_mediumDOUBLE PRECISIONDEFAULT 20 NOT NULLПорог шаблона спектра для среднего дефекта
spectrum_template_strongDOUBLE PRECISIONDEFAULT 30 NOT NULLПорог шаблона спектра для сильного дефекта

PostgreSQL -- схема bearing_reference_book

bearing -- Справочник подшипников

Хранение геометрических и конструктивных параметров подшипников качения, используемых при диагностике оборудования.

ПолеТип данныхОбязательноеОписание
idINTEGERNOT NULL (PK)Уникальный идентификатор записи (sequence bearing_id_seq)
companyVARCHARNOT NULLПроизводитель подшипника (например, SKF, FAG)
modelVARCHARNOT NULLМодель подшипника (например, 6205, NU206)
balls_coefDOUBLE PRECISION--Коэффициент частоты дефекта тел качения
separator_coefDOUBLE PRECISION--Коэффициент частоты дефекта сепаратора
in_coefDOUBLE PRECISION--Коэффициент частоты дефекта внутреннего кольца
out_coefDOUBLE PRECISION--Коэффициент частоты дефекта наружного кольца
in_diameterDOUBLE PRECISION--Внутренний диаметр подшипника (мм)
out_diameterDOUBLE PRECISION--Внешний диаметр подшипника (мм)
ball_diameterDOUBLE PRECISION--Диаметр тел качения (мм)
number_of_ballsINTEGER--Количество тел качения
contact_angleDOUBLE PRECISION--Угол контакта (градусы)
Диагностические частоты

Коэффициенты (balls_coef, in_coef, out_coef, separator_coef) рассчитываются на основе геометрии подшипника и частоты вращения для определения диагностических частот: BPFO (наружное кольцо), BPFI (внутреннее кольцо), BSF (тела качения), FTF (сепаратор).


ClickHouse -- схема default

Все таблицы предназначены для хранения диагностических, телеметрических и событийных данных промышленного оборудования.

Схема СУБД ClickHouse

defects -- Агрегированные вибрационные характеристики

Результаты обработки файлов сырого сигнала -- агрегированные вибрационные и спектральные характеристики по точкам измерения.

ПолеТип данныхКодекОписание
tsDateTime64(3)DoubleDeltaМетка времени с миллисекундной точностью
equipment_pathLowCardinality(String)--Путь до оборудования в дереве предприятия
equipment_idUInt32--Идентификатор оборудования
measurement_point_idUInt32--Идентификатор измерительной точки
rmsFloat32FPC(12), LZ4СКЗ виброускорения для всего сигнала
meanFloat32FPC(12), LZ4Среднее значение амплитуды сигнала
maxFloat32FPC(12), LZ4Максимальное значение амплитуды
minFloat32FPC(12), LZ4Минимальное значение амплитуды
peak_to_peakFloat32FPC(12), LZ4Разница макс. и мин. амплитуды
half_peak_to_peakFloat32FPC(12), LZ4Половина пик-ту-пик
kurtosisFloat32FPC(12), LZ4Эксцесс
crest_factorFloat32FPC(12), LZ4Крест-фактор
rotational_frequencyFloat32--Частота вращения
rms_2_1000Float32FPC(12), LZ4СКЗ виброускорения 2-1000 Гц
rms_10_1000Float32FPC(12), LZ4СКЗ виброускорения 10-1000 Гц
rms_10_2000Float32FPC(12), LZ4СКЗ виброускорения 10-2000 Гц
rms_400_1600Float32FPC(12), LZ4СКЗ виброускорения 400-1600 Гц
rms_1600_6400Float32FPC(12), LZ4СКЗ виброускорения 1600-6400 Гц
rms_10_10000Float32FPC(12), LZ4СКЗ виброускорения 10-10000 Гц
rms_6400_25600Float32FPC(12), LZ4СКЗ виброускорения 6400-25600 Гц
velocity_rms_2_1000Float32FPC(12), LZ4СКЗ виброскорости 2-1000 Гц
velocity_rms_10_1000Float32FPC(12), LZ4СКЗ виброскорости 10-1000 Гц
velocity_rms_10_2000Float32FPC(12), LZ4СКЗ виброскорости 10-2000 Гц
displacement_rms_2_1000Float32FPC(12), LZ4СКЗ виброперемещения 2-1000 Гц
displacement_rms_10_1000Float32FPC(12), LZ4СКЗ виброперемещения 10-1000 Гц
gearNullable(String)DEFAULT NULLНазвание ступени текущей скорости
rms_half_rotFloat32FPC(12), LZ4СКЗ за пол-оборота вала
-- Движок и партиционирование
ENGINE = MergeTree
PARTITION BY (toYYYYMMDD(ts), equipment_id)
ORDER BY (ts, equipment_id, measurement_point_id)
SETTINGS index_granularity = 8192

defects_modulation -- История развития дефектов

Данные о модуляции и пороговых значениях по уровням силы дефекта.

ПолеТип данныхОписание
equipment_idUInt32Идентификатор оборудования
measurement_point_idUInt32Идентификатор измерительной точки
tsDateTime64(3)Метка времени
defect_keyLowCardinality(String)Уникальный ключ дефекта
strengthNullable(Enum8('weak'=1, 'medium'=2, 'strong'=3))Сила проявления дефекта
spectrum_modulationFloat32Модуляция в прямом спектре
envelope_modulationFloat32Модуляция в спектре огибающей
spectrum_weakNullable(Float32)Граница для слабого дефекта в прямом спектре
spectrum_mediumNullable(Float32)Граница для среднего дефекта
spectrum_strongNullable(Float32)Граница для сильного дефекта
envelope_weakNullable(Float32)Граница для слабого дефекта в огибающей
envelope_mediumNullable(Float32)Граница для среднего дефекта в огибающей
envelope_strongNullable(Float32)Граница для сильного дефекта в огибающей
spectrum_template_weakNullable(Float32)Пороговое значение шаблона для слабого дефекта
spectrum_template_mediumNullable(Float32)Пороговое значение шаблона для среднего
spectrum_template_strongNullable(Float32)Пороговое значение шаблона для сильного
ENGINE = MergeTree
PARTITION BY (toYYYYMMDD(ts), equipment_id)
ORDER BY (ts, equipment_id, measurement_point_id, defect_key)
SETTINGS index_granularity = 8192

detected_defects -- Обнаруженные дефекты

Фиксация обнаруженных дефектов с указанием времени и силы проявления.

ПолеТип данныхDEFAULTОписание
equipment_idInt32--Идентификатор оборудования
defect_keyLowCardinality(String)--Уникальный ключ дефекта
mode_idNullable(String)--Идентификатор режима работы
modulationFloat32--Уровень модуляции
strengthEnum8('weak'=1, 'medium'=2, 'strong'=3)--Сила дефекта
detected_atDateTimenow()Метка времени обнаружения
ENGINE = ReplacingMergeTree
PARTITION BY toYYYYMM(detected_at)
ORDER BY (equipment_id, defect_key, detected_at)
SETTINGS index_granularity = 8192

equipment_defects -- Признаки дефектов

Детализированные спектральные характеристики гармоник и боковых полос.

ПолеТип данныхDEFAULTОписание
equipment_idUInt32--Идентификатор оборудования
measurement_point_idUInt32--Идентификатор измерительной точки
tsDateTime64(3)DoubleDeltaМетка времени
is_autospectrumBoolfalseФлаг типа спектра (автоспектр)
defect_typeLowCardinality(String)--Тип гармоники (например, bpfo, shaft)
harmonic_numberInt80Номер гармоники
sideband_numberInt80Номер боковой полосы
frequencyFloat32FPC(12), LZ4Частота гармоники
amplitudeFloat32FPC(12), LZ4Амплитуда гармоники
lowcutFloat32FPC(12), LZ4Нижняя граница полосового фильтра
highcutFloat32FPC(12), LZ4Верхняя граница полосового фильтра
resolutionFloat32FPC(12), LZ4Разрешение по частоте
z_scoreFloat32FPC(12), LZ4Коэффициент по методике диагностики
delta_lFloat32FPC(12), LZ4Коэффициент по методике диагностики
modulationNullable(Float32)FPC(12), LZ4Коэффициент модуляции для гармоники
templateNullable(Float32)FPC(12), LZ4Значение шаблона для сравнения
ENGINE = MergeTree
PARTITION BY (equipment_id, toYYYYMM(ts))
PRIMARY KEY (equipment_id, measurement_point_id, ts)
ORDER BY (equipment_id, measurement_point_id, ts, defect_type, harmonic_number)
SETTINGS index_granularity = 8192
Архивная таблица

Таблица equipment_defects_old идентична по структуре, но использует UInt8 для harmonic_number. Предназначена для архивных данных.


equipment_forecasts -- Прогнозы наработки

Прогнозы наработки оборудования и времени до следующего ремонта.

ПолеТип данныхОписание
equipment_idUInt32Идентификатор оборудования
tsDateTime64(3)Метка времени расчета прогноза
remaining_resourceNullable(DateTime64(3))Оставшийся ресурс (прогнозируемая дата отказа)
last_repair_dateNullable(DateTime64(3))Метка времени последнего ремонта
hours_until_next_repairNullable(UInt32)Часов до следующего ремонта
last_scheduled_shutdown_dateNullable(DateTime64(3))Метка последнего планового останова
hours_until_scheduled_shutdownNullable(UInt32)Часов до планового останова
defect_keyLowCardinality(String)Ключ дефекта, на основе которого строится прогноз
mode_idUUIDИдентификатор режима работы
ENGINE = ReplacingMergeTree
ORDER BY equipment_id
SETTINGS index_granularity = 8192

equipment_modes_history -- История режимов работы

История режимов работы оборудования (включая простои).

ПолеТип данныхDEFAULTОписание
equipment_idUInt32--Идентификатор оборудования
mode_idUUID--Идентификатор режима
start_timeDateTime64(3)DoubleDeltaМетка времени начала режима
end_timeNullable(DateTime64(3))DoubleDeltaМетка времени окончания режима
durationUInt32Delta(4), ZSTD(1)Длительность режима в секундах
is_not_operating_modeBoolfalseПризнак простоя (не рабочий режим)
ENGINE = MergeTree
PARTITION BY toYYYYMM(start_time)
ORDER BY (equipment_id, start_time)
SETTINGS index_granularity = 8192

event_journal -- Журнал событий

Аудит критических, предупреждающих и информационных событий.

ПолеТип данныхОписание
uuidUUIDИдентификатор события
event_typeEnum8('instant'=1, 'duration'=2)Тип события
event_kindLowCardinality(Nullable(String))Категория события (например, vibration)
created_atDateTime64(3)Время создания
resolved_atNullable(DateTime64(3))Время разрешения
resolved_byNullable(String)Кто закрыл событие
equipment_idUInt32Идентификатор оборудования
severityEnum8('critical'=1, 'warning'=2, 'info'=3)Уровень важности
messageStringТекст события
acknowledgedBoolФлаг подтверждения события
acknowledged_atNullable(DateTime64(3))Время подтверждения
acknowledged_byNullable(String)Кто подтвердил
additional_dataNullable(String)Дополнительная информация (JSON)
statusEnum8('open'=1, 'closed'=2, 'acknowledged'=3)Статус события
duration_secondsNullable(UInt32)Длительность события в секундах
ENGINE = MergeTree
PARTITION BY (toYYYYMM(created_at), equipment_id)
ORDER BY (created_at, equipment_id, severity)
SETTINGS index_granularity = 8192

passer_t2_current -- Телеметрия по току

Текущие значения тока электродвигателя и пороги.

ПолеТип данныхКодекОписание
tsDateTime64(3)DoubleDeltaМетка времени
equipment_idUInt32--Идентификатор оборудования
measurement_point_idUInt32--Идентификатор измерительной точки
rmsFloat32FPC(12), LZ4СКЗ силы тока
rms_warnFloat32FPC(12), LZ4Граница предупреждения для СКЗ тока
rms_errorFloat32FPC(12), LZ4Граница аварии для СКЗ тока
ENGINE = MergeTree
PARTITION BY (toYYYYMMDD(ts), equipment_id)
ORDER BY (ts, equipment_id, measurement_point_id)
SETTINGS index_granularity = 8192

passer_v2_vibrations -- Телеметрия по вибрациям

Текущие значения и пороги для ускорения, скорости и перемещения.

ПолеТип данныхКодекОписание
tsDateTime64(3)DoubleDeltaМетка времени
equipment_idUInt32--Идентификатор оборудования
measurement_point_idUInt32--Идентификатор измерительной точки
acceleration_rmsFloat32FPC(12), LZ4СКЗ виброускорения 10-1000 Гц
velocity_rmsFloat32FPC(12), LZ4СКЗ виброскорости
displacement_rmsFloat32FPC(12), LZ4СКЗ виброперемещения
acceleration_absoluteFloat32FPC(12), LZ4Абсолютное значение виброускорения
acceleration_absolute_maxFloat32FPC(12), LZ4Максимальное значение амплитуды
acceleration_absolute_minFloat32FPC(12), LZ4Минимальное значение амплитуды
acceleration_peak_to_peakFloat32FPC(12), LZ4Пик-ту-пик
acceleration_half_peak_to_peakFloat32FPC(12), LZ4Половина пик-ту-пик
kurtosisFloat32--Эксцесс
crest_factorFloat32--Крест-фактор
acceleration_rms_warnFloat32FPC(12), LZ4Граница предупреждения для СКЗ виброускорения
acceleration_rms_errorFloat32FPC(12), LZ4Граница аварии для СКЗ виброускорения
velocity_rms_warnFloat32FPC(12), LZ4Граница предупреждения для СКЗ виброскорости
velocity_rms_errorFloat32FPC(12), LZ4Граница аварии для СКЗ виброскорости
displacement_rms_warnFloat32FPC(12), LZ4Граница предупреждения для СКЗ виброперемещения
displacement_rms_errorFloat32FPC(12), LZ4Граница аварии для СКЗ виброперемещения
ENGINE = MergeTree
PARTITION BY (toYYYYMMDD(ts), equipment_id)
ORDER BY (ts, equipment_id, measurement_point_id)
SETTINGS index_granularity = 8192

passer_v2t2_tachometer -- Телеметрия по тахометрам

Обороты и пороги тахометров.

ПолеТип данныхКодекОписание
tsDateTime64(3)DoubleDeltaМетка времени
equipment_idUInt32--Идентификатор оборудования
measurement_point_idUInt32--Идентификатор измерительной точки
impulses_per_revolutionUInt16--Импульсов на один оборот
revolutions_per_secondFloat32FPC(12), LZ4Частота вращения
revolutions_per_second_warnFloat32FPC(12), LZ4Граница предупреждения
revolutions_per_second_errorFloat32FPC(12), LZ4Граница аварии
revolutions_per_minuteFloat32FPC(12), LZ4Обороты в минуту
revolutions_per_minute_warnFloat32FPC(12), LZ4Граница предупреждения
revolutions_per_minute_errorFloat32FPC(12), LZ4Граница аварии
ENGINE = MergeTree
PARTITION BY (toYYYYMMDD(ts), equipment_id)
ORDER BY (ts, equipment_id, measurement_point_id)
SETTINGS index_granularity = 8192

Результаты линейной регрессии для трендов параметров телеметрии.

ПолеТип данныхКодекОписание
tsDateTime64(3)DoubleDeltaМетка времени расчета тренда
equipment_idUInt32--Идентификатор оборудования
measurement_point_idUInt32--Идентификатор измерительной точки
parameter_nameLowCardinality(String)--Имя параметра (например, temperature)
coefficient_0Float64FPC(12), LZ4Свободный член линейной регрессии
coefficient_1Float64FPC(12), LZ4Угловой коэффициент линейной регрессии
r_squaredFloat64FPC(12), LZ4Коэффициент детерминации
p_valueFloat64FPC(12), LZ4p-значение регрессии
standard_errorFloat64FPC(12), LZ4Стандартная ошибка
data_points_countUInt32--Количество точек данных в расчете
trend_startDateTime64(3)--Начало периода тренда
trend_endDateTime64(3)--Окончание периода тренда
calculation_timeDateTime64(3)--Время выполнения расчета
ENGINE = ReplacingMergeTree(calculation_time)
PARTITION BY (toYYYYMMDD(ts), equipment_id)
ORDER BY (equipment_id, measurement_point_id, parameter_name)
SETTINGS index_granularity = 8192

Индексы:

  • idx_parameter_name -- parameter_name TYPE set(0) GRANULARITY 1
  • idx_trend_time -- (trend_start, trend_end) TYPE minmax GRANULARITY 1

Диагностические запросы

ClickHouse

-- Последние 10 записей телеметрии
SELECT * FROM telemetry ORDER BY timestamp DESC LIMIT 10;

-- Проверка вставки данных
SELECT count() FROM defects WHERE ts > now() - INTERVAL 1 HOUR;

-- События за последний день
SELECT * FROM event_journal
WHERE created_at > now() - INTERVAL 1 DAY
ORDER BY created_at DESC
LIMIT 20;

PostgreSQL

-- Количество подшипников в справочнике
SELECT COUNT(*) FROM bearings;

-- Проверка пользователей
SELECT id, username, email, active FROM users;

-- Дерево объектов
SELECT id, name, type, path FROM tree ORDER BY path;