Ускорьте преобразование ETL - Pentaho Kettle - PullRequest
0 голосов
/ 15 ноября 2018

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

У меня есть промышленная машина, которая производит некоторые артефакты. Для каждой работы (максимум 20 минут по времени) датчики регистрируют давление и температуру масла и некоторые другие вибрационные данные (очень высокие частоты). Все эти временные ряды записываются в файл .csv, по одному для каждого датчика и для каждой работы. Каждый файл называется:

yyyy_mm_dd_hh_mm_ss_sensorname.csv

и содержит только последовательность действительных чисел.

Я должен как-то хранить данные такого рода. Я тестирую многие решения, реляционные и нет, такие как MySQL, Cassandra, Mongo и т. Д.

В частности, для Кассандры и Монго я использую Интеграция данных Pentaho в качестве инструмента ETL.

Я разработал общую схему для обеих БД (уникальное семейство / коллекция столбцов):

---------------------------------------
id | value | timestamp | sensor | order
---------------------------------------

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

Это замедляет всю мою работу: загрузка одной работы (только с одной высокочастотной метрикой, в общей сложности 3M строк, более или менее) занимает 3 минуты для MongoDB, 8 минут для Кассандры.

Я использую обе БД на одном узле (на данный момент) с 16 ГБ ОЗУ и 15-ядерным процессором.

Я уверен, что неправильно делаю преобразование, поэтому вопрос: как я могу ускорить процесс?

Вот мой файл KTR: https://imgur.com/a/UZu4kYv (недостаточно репов для публикации изображений)

1 Ответ

0 голосов
/ 15 ноября 2018

К сожалению, вы не можете использовать имя файла, которое находится на вкладке Additional output field, потому что это поле заполняется параллельно, и есть вероятность, что оно не известно, когда вы используете его в вычислениях.

Однако в вашем случае вы можете поместить имя файла в поле, например, с помощью data grid, и использовать его для вычисления метки времени и датчика. Параллельно вы делаете необходимые преобразования по id, значению и порядку. Когда закончите, вы снова соедините их. Я добавил Unique Row к общему потоку, на всякий случай, если вход глючит и имеет более одной отметки времени, датчик.

enter image description here

...