Кластерные таблицы BigQuery: байты обрабатываются несогласованно при выполнении запросов - PullRequest
0 голосов
/ 05 октября 2018

Для нескольких запусков одного и того же запроса количество обрабатываемых байтов является переменным (результаты значительно меняются, от 20 до 30 ГБ).

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

Ожидается ли это?

1 Ответ

0 голосов
/ 05 октября 2018

Это ожидаемое поведение для кластеризованных таблиц - как только обработчик запросов откроет достаточно кластеров для получения желаемых результатов, он прекратит сканирование и зарядит только для отсканированных до сих пор байтов.

Например:

SELECT * WHERE x=1 LIMIT 1

остановится после того, как найдет первое, если x не кластеризован, и выполнит полное сканирование таблицы, если никого нет.

Фактические запросы к той же таблице:

SELECT *, RAND()
FROM `fh-bigquery.wikipedia_v3.pageviews_2017`
WHERE datehour >= "2017-12-01"
AND title LIKE '%hoffa%'
LIMIT 1

Query complete (2.1s elapsed, 111 MB processed)
Query complete (1.8s elapsed, 126 MB processed)
Query complete (1.9s elapsed, 114 MB processed)

SELECT *, RAND()
FROM `fh-bigquery.wikipedia_v3.pageviews_2017`
WHERE datehour >= "2017-12-01"
AND title LIKE '%khoffa%'
LIMIT 1

Query complete (2.9s elapsed, 2.52 GB processed)
Query complete (3.0s elapsed, 1.19 GB processed)
Query complete (1.9s elapsed, 114 MB processed)


SELECT *, RAND()
FROM `fh-bigquery.wikipedia_v3.pageviews_2017`
WHERE datehour >= "2017-12-01"
AND title LIKE '%fhoffa%'
LIMIT 1

Query complete (5.1s elapsed, 188 GB processed)
Query complete (5.1s elapsed, 188 GB processed)
Query complete (5.1s elapsed, 188 GB processed)
  • '%hoffa%' сканирует меньше данных, так как существует высокая вероятность найти их в первом открытом кластере.
  • '%khoffa%' труднее найти, поэтому иногда многим кластерам необходимобудьте открытыми - но вам может повезти, и вы найдете его на первом.
  • '%fhoffa%' там нет, поэтому BQ должен открыть каждый кластер в случае, если он был.
  • Я добавил RAND() для обеспечения отсутствия кэширования.
  • Большой выигрыш: Раньше BigQuery взимал 188 ГБ за подобные запросы, но теперь он может взимать 0,05% от этого в подобных случаях.

Обратите внимание, что если вы заставите BigQuery scкаждый кластер, то он вернулся к 188 ГБ.Например, если вы хотите найти верхнюю %hoffa% (а не только первую):

SELECT *, RAND()
FROM `fh-bigquery.wikipedia_v3.pageviews_2017`
WHERE datehour >= "2017-12-01"
AND title LIKE '%hoffa%'
ORDER BY views DESC
LIMIT 1

Query complete (5.5s elapsed, 188 GB processed)

Подробнее о преимуществах кластеризованных таблиц:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...