#google-bigquery
#google-bigquery
Вопрос:
Учитывая:
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)
for 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)
из представления в таблицу).
Однако я не смог найти способ записать таблицу поверх представления с тем же именем. Попытка so дает ... is not allowed for this operation because it is currently a VIEW.
Возможно ли это решение транзакционным способом (без удаления представления за один шаг и создания вместо него таблицы)? Если да — как?
Комментарии:
1. Зачем вам нужна таблица на каждый день? Возможно, я что-то упускаю, но не могли бы вы просто создать две таблицы с разделением на даты, а затем представление (определение которого вы обновляете каждый день), объединяющее данные из обеих?
2. @ElliottBrossard Мне не понравилась семантика представления с обновлением определений, поскольку мне пришлось бы либо переключать время определения представления точно в день смены (неосуществимо / стабильно), либо определять его как совокупность
Agg(t)
иAll Daily tables after day t
, которая почти дублируетAgg
логику вместо ее повторного использования. Что касается секционированных таблиц дляDaily
иAgg
, если я найду хорошее решение для переключения представлений, вы правы. Я думал о разделах как о технически эквивалентных в этом случае, и надеялся, что объяснение дизайна с помощью ежедневных таблиц не зависит от BQ.3. Кроме того, разбиение на разделы по датам
Agg(t)
не так важно, поскольку вряд ли оно будет запрашиваться в течение нескольких дней. Разделение по датеDaily(t)
действительно имеет большой смысл.