Как выбрать между представлениями или запланированными запросами для дедупликации таблиц BigQuery, импортированных через Stitch?
Я создаю статистические данные, генерируемые по запросу, из данных, хранящихся в таблицах BigQuery. Некоторые данные импортируются ежедневно с помощью стежка с использованием "Только добавление". Это приводит к дублированию наблюдений в импортированных таблицах (около 20 тыс. Строк растут на 8 тыс. Ежегодно).
Я мог бы либо запланировать запрос BigQuery для хранения дедуплицированных значений в очищенной таблице, либо построить представления, чтобы сделать то же самое, но я не понимаю компромиссов с точки зрения:
- затраты на BigQuery на хранение / выполнение запланированных запросов и представлений.
- скорость последующих запросов зависит от дедуплицированных представлений. Кешируются ли просмотры?
Правильно ли я предполагаю, что ежедневные запланированные запросы для хранения дедуплицированных данных более затратны (для перезаписи сохраненных таблиц), но ускоряют последующие запросы к дедуплицированным данным (экономия затрат на использование)?
Дедуплицированные данные, в свою очередь, будут запрашиваться сотни раз в день, чтобы получить вывод панели мониторинга, для которого важна скорость реагирования.
Как мне спорить, выбирая лучшее решение?
2 ответа
Перейдем к фактам:
- Цена, которую вы заплатите в запросе, одинакова независимо от того, используете ли вы просмотр или запланированный запрос.
- При использовании запланированного запроса вам нужно будет заплатить за данные, которые вы храните в дедуплицированной таблице. Поскольку View не хранит никаких данных, с вас не будет взиматься дополнительная плата.
- С точки зрения скорости выигрывает подход с использованием запланированного запроса, потому что ваши данные уже удалены и очищены. Если вы собираетесь снабжать панели мониторинга этими данными, подход View может привести к лени при загрузке панели мониторинга.
- Другой возможный подход - использование материализованных представлений, которые представляют собой более умные представления, которые периодически кэшируют результаты для повышения производительности. В этом руководстве вы можете найти некоторую информацию о выборе между запланированными запросами и материализованными представлениями:
Когда мне следует использовать запланированные запросы, а не материализованные представления?
Запланированные запросы - удобный способ периодически выполнять произвольно сложные вычисления. Каждый раз, когда запрос выполняется, он выполняется полностью. Предыдущие результаты не используются, и вы оплачиваете полную стоимость запроса. Запланированные запросы отлично подходят, когда вам не нужны самые свежие данные и вы хорошо переносите их устаревание.
Материализованные представления подходят, когда вам нужно запросить самые свежие данные, сокращая при этом время ожидания и затраты за счет повторного использования ранее вычисленных результатов. Вы можете использовать материализованные представления в качестве псевдо-индексов, ускоряя запросы к базовой таблице без обновления существующих рабочих процессов.
Как правило, по возможности и если вы не выполняете произвольно сложные вычисления, используйте материализованные представления.
Я думаю, что на это также может повлиять то, как часто будет запрашиваться ваше представление/таблица. Например, очень сложный запрос к большому набору данных будет затратным каждый раз при его выполнении. Если результатом является значительно меньший набор данных, будет более рентабельно запланировать запрос для сохранения результатов и запросить результаты напрямую, а не использовать представление, которое будет выполнять очень сложный запрос снова и снова.
Для фактора скорости - определенно лучше запрашивать сокращенную таблицу напрямую, а не представление.Что касается фактора стоимости , я бы попытался понять, как часто будет запрашиваться это представление/таблица и каковы затраты на обработку и хранение:
- Для представления: приблизительно рассчитайте затраты на обработку * количество раз, которое будет запрашиваться ежемесячно, например
- Для хранимой таблицы: запланированные запросы, выполняемые в месяц * затраты на обработку + ежемесячные затраты на хранение результатов таблицы.
Это должно дать вам практически все аргументы в пользу вашего решения.