Преобразовать представление в таблицу в BigQuery

#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) действительно имеет большой смысл.