Как записать «текущий статус» работы ETL? - PullRequest
0 голосов
/ 04 апреля 2020

Я использую конвейер Kiba ETL в фоновом режиме. Я хотел бы предоставить некоторый статус пользователю во время выполнения задания. Каков наилучший способ добиться этого?

Можно ли как-нибудь использовать какую-нибудь переменную?

Или мне следует сохранять обновление статуса в базе данных после каждого шага (один раз в исходном, один раз для каждого превратить, один раз в пункт назначения)? Один раз для каждого преобразования кажется много дополнительной записи в БД, а также, кажется, немного «грязно» общаться с базой данных из преобразования.

Спасибо!

1 Ответ

1 голос
/ 05 апреля 2020

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

Он может отчитываться в записи базы данных (что будет моделировать работу - рекомендуется, если вы делаете немного тяжеловесный импорт и вы хотите иметь возможность искать потом), но вы также можете отчитаться в какой-либо форме системы pub-sub (redis, Postgres, ActionCable ...), если вы хотите что-то более быстрое и более легкое .

Преобразование на самом деле является отличным местом для отслеживания прогресса, но это не означает, что вы должны отчитываться в каждой отдельной строке (потому что это приведет к записи SQL в каждой строке, что обычно слишком много !).

Я рекомендую сообщать о прогрессе только через каждые N строк, используя код, подобный следующему:

pre_process do
  @count ||= 0
end

transform do |r|
  @count += 1
  if @count % 500 == 0
    # TODO here: notify the report system
  end
  r
end

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

Обязательно проследите также за началом работы, концом или f задание (успех / ошибка / полнота), чтобы убедиться, что у вас нет устаревших заданий.

Кажется, что «грязно» говорить с базой данных, но только потому, что мы смешиваем проблемы немного. Если вы делаете это каждые N строк и стараетесь не загрязнять основную систему, это прекрасно!

Надеюсь, это поможет, дайте мне знать, если вам нужна дополнительная помощь!

...