Как запросить запросы Google Cloud Load Balancer, обработанные стеками, через BigQuery по меткам времени без загрузки всех данных?

Я пытаюсь запросить свой набор данных по метке времени, но мне выставлен счет за полное сканирование набора данных. Можно ли запрашивать только конкретную временную метку и уменьшать размер анализируемых данных?

Обратите внимание, что я использую Stackdrive Sink, который передает данные в реальном времени на мой набор данных. У меня нет никакого контроля над схемой.

SELECT
  REGEXP_EXTRACT(httpRequest.requestUrl, r"^.+cid=([0-9]*)") as cid,
  REGEXP_EXTRACT(httpRequest.requestUrl, r"^.+pid=([0-9]*)") as pid
FROM
   `dataset_20190305` -- Date partition - no time
WHERE timestamp >=TIMESTAMP('2019-03-05 16:50:00')

1 ответ

Решение

Есть только два способа снизить стоимость запросов BQ, используя только предложение where: разбиение и кластеризация. Судя по названию вашего набора данных, я подозреваю, что ваш набор данных содержит только данные, относящиеся к 5 марта. К сожалению, BQ поддерживает только дневное разбиение, поэтому оно не поможет вашему делу. Невозможно разделить любой блок времени меньше дня. Тем не менее, это может сделать ваши данные чище, если вы просто создадите одну таблицу и разделите ее по дням вместо того, чтобы создавать новый набор данных каждый день.

Другой вариант, кластеризация, включает в себя указание поля и предоставление всех потенциальных значений. Например, если у вас есть поле "Цвет" типа String, вы можете установить потенциальные значения как "Красный", "Зеленый" и "Синий", и, следовательно, уменьшить размер запроса до трети.

Если вы просто хотите сократить расходы и часто повторяете аналогичный запрос для определенной таблицы, вы можете запросить его один раз и скопировать результаты в новую таблицу, которая по существу ограничит ваш запрос указанным диапазоном времени.

При этом, как правило, старайтесь следовать рекомендациям BQ, например, выбирая только те столбцы, которые вас интересуют.

Другие вопросы по тегам