В hbase в TEST:Z_RECORDS (row key = C_MAIN_V_ID) загрузить транзакции по двум аналитическим счетам (диапазон историчности 30 минут: за каждые пять минут по каждому счету 5 транзакций).
Разработать приложение, которое будет вычитывать из hbase TEST:Z_RECORDS пятиминутные диапазоны, по каждому аналитическому счету формировать остаток на конец этого периода. Входящее сальдо на 14:00 по аналитическим счетам нулевое. Результат предоставить в виде графика изменения остатка по каждому аналитическому счету (шаг 5 минут).
C_LOAD_DATE - время транзакции C_MAIN_V_ID - аналитический счет SUMM - транзакция
Из-за отсутствия опыта работы с HBase принял решение сперва реализовать решение задачи
без использования базы (т.к. не мог оценить временя, которое могло на это уйти),
чтобы сначала реализовать алгоритм и получить графики.
В данном решении исходные данные просто грузятся из файла в оперативную память. Графики получены.
Далее планируется подменить источник данных на загрузку из HBase.
Так как не было явного указания использовать Java, выбрал Kotlin для реализации прототипа. Выбор обоснован тем, что из SDK идёт больше утилитных методов для работы со Stream'ами, да и в целом для реализации кода в функциональном стиле. Присутствует совместимость с JVM платформой, поэтому можно вызывать любые библиотеки для обработки данных (АПИ для HBase или Spark, в частности).
Реализация программы Минимум на Java (на всякий случай).
Устнановил HBase на рабочу машину: http://hbase.apache.org/book.html#quickstart. Остановился на реализации тестовых классов для загрузки таблиц. Последняя блокирующия проблема: зависает на вставке значения в таблицу com/rd/transaction/hbase/SimpleInsert.java:35
- Для запуска реализации Java нужно в IDEA вызвать com.rd.transaction.MainJava из исходников
- Для запуска реализации Kotlin нужно в IDEA вызвать com.rd.transaction.Main.kt из исходников
- Для запуска из дистрибутива нужно:
- Собрать проект
- Запустить run.sh из дистрибутива ./build/distribution/transaction-analytics-1.0-SNAPSHOT.zip (запускается реализация Java)