Если предположить, что это единственные четыре возможных ответа, ответ почти наверняка будет следующим: «Создайте заново таблицу с разделительным столбцом и столбцом кластеризации».
Позволяет исключить остальные:
- Используйте ключевое слово LIMIT, чтобы уменьшить количество возвращаемых строк.
Это не поможет, поскольку LIMIT применяется только после того, как полное сканирование таблицы уже выполнено , поэтому вам все равно будет выставлен счет, несмотря на ограничение.
- Создайте отдельную таблицу для каждого идентификатора.
Это вряд ли поможетКроме того, что в дополнение к организационной неразберихе, вам придется запрашивать каждую таблицу, чтобы найти все правильные временные метки, и обрабатывать тот же объем данных, что и раньше (но с гораздо большей работой).
- Используйте флаг
bq query --maximum_bytes_billed
, чтобы ограничить количество выставляемых байтов.
Вы могли бы сделать это, но тогда запрос завершится неудачно , когда будет выставлено максимальное количество байтовбыли слишком высоки, так что вы бы нене получите ваши результаты.
Так почему разбиение и кластеризация ?
BigQuery (по запросу) биллинг основано на выбранных столбцах и объеме данных, которые вы читаете в этих столбцах. Таким образом, вы хотите сделать все возможное, чтобы уменьшить объем обрабатываемых данных.
В зависимости от конкретного запроса, разбиение по отметке времени позволяет сканировать данные только за соответствующие дни. Очевидно, что это может быть огромной экономией по сравнению со сканированием всей таблицы.
Кластеризация позволяет объединять часто используемые данные в таблицу путем сортировки на основе столбца кластеризации, что исключает необходимость сканирования ненужного сканирования. данные на основе фильтра (предложение WHERE). Таким образом, вы сканируете меньше данных и снижаете свои расходы. Аналогичное преимущество для агрегации данных.
Это, конечно, предполагает, что вы хорошо понимаете запросы, которые вы фактически делаете, и какие столбцы имеют смысл кластеризовать.