Компоненты унификации

Строительные блоки унификации данных — стандартизация формата, унификация структуры, семантическая унификация, нормализация и использование унифицированных данных.

Стандартизация формата

Все данные, поступающие из различных источников, приводятся к единому формату.

Например, данные от IoT-устройств приходят в формате JSON:

example.json
{
  "device_id": "sensor-123",
  "temp": 27.3,
  "time": 1739960923
}

Унификация структуры данных

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

Все данные хранятся в таблице channel_data, которая связывает их с оборудованием, сеансами, каналами и единицами измерения:

ПолеТипОписание
idbigintУникальный идентификатор записи (первичный ключ).
equipment_idbigintСсылка на оборудование (equipment.id).
seance_idbigintСсылка на сеанс (seances.id).
channel_idbigintСсылка на канал (channels.id).
unit_idbigintСсылка на единицу измерения (units.id).
archive_type_idintegerСсылка на тип архива (referenceparameters.id).
event_timeintegerВремя события (например, временна́я метка).
valuecharacter varying(100)Значение, полученное по каналу.
created_attimestamp(6) without time zoneВремя создания записи.
updated_attimestamp(6) without time zoneВремя последнего обновления записи.

Где:

  • equipment_id: уникальный идентификатор оборудования.
  • seance_id: уникальный идентификатор сеанса.
  • channel_id: уникальный идентификатор канала.
  • unit_id: уникальный идентификатор единицы измерения.

При сохранении данных от различных устройств в центральном хранилище:

  • данные приводятся к единому формату и структуре;
  • они сохраняются в унифицированной таблице данных channel_data.

Семантическая унификация

Все данные имеют одинаковый смысл и интерпретацию во всех системах.

Например:

  • Все временны́е метки представлены в формате UTC. Это было заложено на этапе проектирования системы.
  • Во всех системах используются одни и те же единицы измерения (например, градусы Цельсия).

Для унификации единиц измерения в систему была добавлена модель Units. В ней хранятся единицы измерения, используемые для данных каналов.

ПолеТипОписание
idbigintУникальный идентификатор записи (первичный ключ).
namecharacter varying(30)Название единицы измерения.
varnamecharacter varying(30)Короткое имя переменной для единицы измерения.
descriptioncharacter varying(100)Описание единицы измерения.
conversion_factordouble precisionКоэффициент преобразования единицы измерения.
roundingsmallintЧисло знаков после запятой для округления.
synonymscharacter varying[]Массив синонимов единицы измерения.
created_attimestamp(6) without time zoneВремя создания записи.
updated_attimestamp(6) without time zoneВремя последнего обновления записи.

Нормализация данных

Модель данных системы приведена к нормальной форме Бойса — Кодда (третьей нормальной форме) в части атомарных (скалярных) значений. Некоторые сущности модели данных используют составные структуры для оптимизации работы с редкими, нестандартными атрибутами.

Данные разделены на логические таблицы (equipment, channels, units, sessions), что исключает избыточность и дублирование.

Например:

  • Таблица channel_data ссылается на таблицы equipment, channels, units и sessions через внешние ключи.

Использование унифицированных данных

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

Анализ данных с помощью SQL

sql
SELECT equipment_id, AVG(value) as avg_value
FROM channel_data
WHERE archive_type_id = 4 AND channel_id = 3
GROUP BY equipment_id
ORDER BY equipment_id

Запрос данных через REST API

Пример запроса:

bash
GET /api/v1/channel_data?equipment_id=1&archive_type=daily&channel_id=3

Пример ответа:

json
[
  {
    "id": 123,
    "equipment_id": 1,
    "seance_id": 2,
    "channel_id": 3,
    "archive_type_id": 4,
    "value": 42.5,
    "event_time": 1739950861
  }
]

Связанные темы

Последнее обновление

Эта страница была полезной?