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

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

Обратите внимание, что я использую 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 Ответ

2 голосов
/ 06 марта 2019

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

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

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

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

...