У меня есть этот случай использование, где я должен делать инкрементное агрегирование данных, которая приходит вИнкрементальная агрегация: PL/SQL
У меня есть таблица , которая имеет следующие столбцы
id,insertion_time,key,col2,col3
. я должен вычислить результат = col2 * col3 для каждой клавиши и найти максимум за час и поставить в другую таблицу B с колонками.
key,hour,max
поэтому условие, если я собираюсь выполнить ту же процедуру через некоторое время, если новые данные были вставлены в таблице А, процедура должна перебрать только новые записи для обработки.
То, что я сделал до сих пор:
Я создал временную таблицу C для хранения последнего insertion_timestamp
, который был обработан в last_timestamp
. Каждое выполнение процедуры проверяет это значение и выберет только записи, которые имеют insertion_time > last_timestamp
.
то прок будет сделать следующее:
- получить въездную last_timestamp из таблицы C
- выбрать максимальное значение col1 * col2 группы по ключевым и час где insertion_timestamp> lasttimestamp
для каждый результат проверяет, присутствует ли пара для пары (ключ, час) в B
a) если присутствует - обновить запись, если новое значение col1 * col2 больше существующего значения
б) если нет, то добавить запись
Является ли это правильный способ делать инкрементную агрегацию в реляционных базах данных? Или есть лучший подход?
Thanks
@eggyal Я не хочу, чтобы эта процедура выполнялась на каждой вставке. –
Чтобы быть ясным, почему бы и нет? – eggyal
не будет проблемой производительности? не будет ли лучше делать то же самое после кучи вставок? исправьте меня, если я ошибаюсь. –