Дано:
Daily(t)
- таблица, содержащая события со дня t
(изменяемые только в течение дня t
)
Agg(t)
- таблица, содержащая агрегацию всех исторических событий до дня t
(неизменная после дня t
)
В течение дня t
, пока Daily(t)
все еще изменчив, я определяю представление V_Agg(t)
следующим образом:
V_Agg(t)=q(Agg(t-1), Daily(t))
- (q
является агрегирующим запросом)
Поскольку Daily(t)
не меняется после дня t
, когда день t
заканчивается, я бы хотел "материализовать" V_Agg(t)
, превратив его в Agg(t)
, чтобы V_Agg(t+1)
работал с ним.
При реализации этого процесса я понял, что на самом деле достаточно Agg(t)
и Daily(t)
. Я могу иметь Agg(t)
в качестве представления в течение дня t
, и в какой-то момент в течение дня t
(не имеет значения, когда) я могу заменить теперь неизменное представление Agg(t-1)
таблицей с таким же именем (Agg(t-1)
).
Это избавит меня от необходимости поддерживать V_Agg(t)
и в целом будет более стабильным (я могу создать Agg(t)
независимо от процесса, который превращает Agg(t-1)
из представления в таблицу).
Однако я не смог найти способ написать таблицу поверх представления с тем же именем. Попытка так дает ... is not allowed for this operation because it is currently a VIEW.
Возможно ли это решение транзакционным способом (без удаления представления за один шаг и создания таблицы)? Если так - как?