Expand Cut Tags

No cut tags
mns2012: (Default)
[personal profile] mns2012
На работе стоит задача высчитывать автоматически число циклов ковша экскаватора во времени (метрика продуктивности).

Что дано:
- в среднем каждые 5 минут эксакаватор, на котором установлена система датчиков, посылает в облако бинарный tag-файл, в котором содержатся показания датчиков от времени. В этом файле каждая отдельная запись показаний приборов ("событие") представлена строкой. События генерируются с частотой примерно 5 Hz (5 строк в секунду).

У меня есть user defined function, небольшая процедура исполняющая "бизнес-логику":
- я беру эти самые записи;
- детектирую интервалы, в которых происходят колебания ковша;
- для каждого интервала фильтрую частоты по мощности, оставляя лишь k самых мощных;
- подсчитываю число пиков оставшихся гармоник.

Есть проблема: tag-файлы поступают в хранилище не по очереди; может даже так случиться, что вчерашний файл приходит только сегодня.

Я спроектировал ETL-процесс в MS Azure:
- tag-файлы поступают в blob-хранилище;
- триггер-функция (function app) реагирует на поступление каждого нового файла в хранилище и конвертирует его в читабельный формат;
- далее содержимое файлов отправляется в хаб;
- откуда оно записывается в озеро данных;
- из озера данные поступают в Databricks Delta Live Table процесс, который формирует бронзовый, серебряный и золотой слои данных, в процессе чего выполняется моя UDF-процедура;
- результат выполнения пользовательской процедуры записывается в золотую таблицу, которую можно заносить в регулярные автоматически генерируемые файлы отчетов.

Трудность в том, что из-за запаздывания поступления данных стоит проблема пересчета интервалов и циклов в них. Пусть, например, только что поступивший tag-файл, заполняет дыру между двумя вчерашними интервалами. Вследствие того, что я считаю циклы только целиком, исходя лишь из пиков главных гармоник, я отбрасываю неполные циклы, которые могут иметь место в начале и в конце интервалов колебаний ковша. По этой причине и требуется пересчет в данном случае, начиная с предшествующего интервала и кончая последующим.

Задача многократно облегчается, если UDF-процедура выполняется всего один раз на каждый tag-file. В этом случае мне всё равно, запаздывают мои данные или нет, и никаких пересчётов производить не нужно. Для этого мне потребуется лишь изменить UDF-процедуру для учёта неполных циклов. Тогда каждый tag-file потребуется просчитать лишь однажды, а результаты подсчёта можно будет сразу записывать в базу.

Кстати, финтифлюшки типа Azure Data Explorer и Databricks стоят очень дорого. На моей подписке я потратил почти 10 килобаксов за последние десять месяцев.

Date: 2025-01-16 04:27 pm (UTC)
From: [identity profile] retrophil.livejournal.com

поделитесь результатами спуст год? есть эффект? инструменты поменяли?

Date: 2025-01-17 03:41 pm (UTC)
From: [identity profile] retrophil.livejournal.com
Здорово!

Profile

mns2012: (Default)
mns2012

January 2026

S M T W T F S
    1 23
45678910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Page generated Jan. 14th, 2026 10:24 pm
Powered by Dreamwidth Studios