#google-bigquery #google-cloud-platform
#google-bigquery #google-облачная платформа
Вопрос:
Мы оцениваем варианты облачного хранилища для создания аналитического решения. Нам нужно предоставлять анализ тенденций в день на одного клиента для многих клиентов (400 ), соотношение запросов для этих двух измерений одинаково. Моя первоначальная мысль — создать таблицу с разделением на даты по одному для каждого клиента, поэтому для запросов на каждого клиента я ограничиваю сканирование одним конкретным днем, а для запросов по всем клиентам я использую функцию подстановочных знаков таблицы.
Вопросы:
- Есть ли способ разделения по дате и клиенту, чтобы я мог хранить все данные в одной таблице и при этом ограничивать объем сканирования данных?
- Если ответ на # 1 — нет, каково влияние на производительность запросов по 400 таблицам по сравнению с одной таблицей (тот же объем данных)
Ответ №1:
- Разделение хэша и разделение по определенным полям в таблице пока не поддерживаются, поэтому сейчас это невозможно.
- Если вы запрашиваете 400 таблиц с помощью подстановочных знаков и фильтруете клиентов с помощью _TABLESUFFIX , запрос будет считывать только соответствующие таблицы, и с вас будет взиматься плата только за эти таблицы; если вы запрашиваете одну таблицу, вы можете фильтровать даты с помощью _PARTITIONTIME, и с вас будет взиматься плата только за соответствующие разделы. С точки зрения производительности считывается меньше метаданных, если вы запрашиваете одну таблицу, но это не должно быть много для 400 таблиц.
Комментарии:
1. Спасибо, я заметил, что я не могу использовать _partitiontime и _tablesuffix в одном запросе в стандартном SQL для сканирования только необходимого раздела в соответствующих таблицах. однако я могу использовать TABLE_QUERY с фильтром table_id вместе с _partitiontime это помогает ограничить отсканированные данные, потому что я могу читать только необходимые разделы из соответствующих таблиц.