Случайность в предложении LIMIT в BigQuery - PullRequest
0 голосов
/ 28 февраля 2020

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

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

Вы правы в том, что Big Query распределяет задания по сбору данных между работниками. Каждый работник читает свой осколок набора данных. По этой причине, если вы выполняете запрос более одного раза, вы можете каждый раз получать разные результаты.

В вашем случае вы получаете тот же набор данных, вероятно, потому что вы используете Результаты BigQuery Cached . Эта функция позволяет BigQuery кэшировать результаты пакетных и интерактивных запросов во временных таблицах в течение примерно 24 часов (хотя, согласно документации, существуют исключения для этого периода времени, ссылка ).

Кэшированные результаты BigQuery - это функция, включенная по умолчанию. Однако вы можете отключить его в пользовательском интерфейсе: Подробнее >> Настройки запросов >> Управление ресурсами >> Использовать кэшированные результаты , как вы также можете видеть ниже:

enter image description here

Кроме того, важно знать, что кэширование не может быть включено, если для таблицы назначения задано .

Вы можете проверять различный набор результатов при каждом запуске запроса, отключая результаты кэширования и используя приведенный ниже запрос, просто в качестве примера:

SELECT gender, tripduration  
FROM `bigquery-public-data.new_york_citibike.citibike_trips` LIMIT 10

В качестве информации о бонусе, Я хотел бы отметить, что, согласно документации , предложение LIMIT задает неотрицательное целое число, которое определяет количество отображаемых строк. Однако применение LIMIT не влияет на количество прочитанных данных. Таким образом, вам выставлен счет за чтение всех байтов во всей таблице, а также за запрос по вашей бесплатной квоте уровня. Подробнее об этом можно прочитать здесь .

Надеюсь, это поможет.

1 голос
/ 28 февраля 2020
Предложение

LIMIT просто ограничивает вывод набора результатов, а не объем читаемых данных. Поэтому не имеет значения, сколько работников занято для сканирования / чтения данных. Результаты всегда будут одинаковыми.

Надеюсь, это поможет.

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