Код выглядит следующим образом (как показано на скриншоте)
Код: Выделить всё
import re
import json
metrics_regex = r'\d\d\d\d\/\d\d\/\d\d\s\d\d:\d\d:\d\d\s-\s.*\s-\sFinished processing\s\(I=(\d+),\s\w=\d+,\s\w=\d+,\s\w=(\d+),\s\w=\d+,\s\w=(\d+)\)'
matches = re.findall(metrics_regex, rowMeta.getString(row, 6))
ingest_nr = 'total_records_ingested'
written_nr = 'total_records_written'
error_nr = 'total_errored_records'
metrics = {'hop_job': rowMeta.getString(row, 1)}
for match in matches:
r_in, r_out, r_err = int(match[0]), int(match[1]), int(match[2])
if len(metrics.keys()) == 1:
metrics[ingest_nr] = r_in
metrics[written_nr] = r_out
metrics[error_nr] = r_err
else:
metrics[ingest_nr] += r_in
metrics[written_nr] += r_out
metrics[error_nr] += r_err
metrics = json.dumps(metrics)
Я протестировал этот сценарий локально на образце строки, и он работает.
Для пояснения: код работает, это код, который является частью преобразования сценария в конвейере Apache Hop. Основная проблема заключается в том, что поле metrics записывается как NULL в целевую таблицу, а не как ненулевое значение JSON
Подробнее здесь: https://stackoverflow.com/questions/789 ... -transform