BigQuery Select с лимитным эквивалентом - PullRequest
0 голосов
/ 22 марта 2020

Кто-нибудь знает, как лучше с точки зрения производительности для такого запроса в BigQuery?

SELECT lastUpdated
FROM `test_db.test_dataset.Customers`
ORDER BY lastUpdated DESC
LIMIT 1

Он отлично работает и получает последний результат по дате, однако я немного обеспокоен ограничением в BigQuery:

Запрос завершен (прошло 0,3 с c, обработано 2,9 МБ)

Есть ли способ выполнить подобный запрос, не затрачивая столько времени на обработку?

Ответы [ 2 ]

1 голос
/ 22 марта 2020

Если вы беспокоитесь о «расходах», пожалуйста, примите во внимание только две вещи в запросе BigQuery:

  1. Сколько столбцов сканируется? Вы можете оптимизировать, выбрав только тот столбец, который определенно необходим для запроса. Кроме того, если столбец имеет тип RECORD, выбор только вложенного столбца также поможет .
  2. Сколько строк сканируется? Обратите внимание, что «LIMIT / WHERE / ORDER BY» не меняет количество сканируемых строк в BigQuery. 2 вещи, которые могут уменьшить количество проверенных строк: разбиение и кластеризация . В вашем случае кластеризация по lastUpdated определенно поможет, когда ваша таблица будет расти в будущем.
0 голосов
/ 22 марта 2020

Я бы предложил использовать MAX() вместо:

SELECT MAX(lastUpdated)
FROM `test_db.test_dataset.Customers`;

Я считаю, что ORDER BY в BigQuery не всегда оптимизирован для параллельной среды. В любом случае, я думаю, MAX() понятнее того, что делает ваш запрос.

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