Может ли BigQuery выполнять предикатное нажатие при запуске широковещательного соединения? - PullRequest
0 голосов
/ 20 декабря 2018

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

Если я выполняю SELECT из большой таблицы с большим количеством столбцов (700+) с простым условием фильтрации, и условие заставляет его найти только несколько строк, запрос выполняется быстро, и я вижу, чтоусловие фильтрации используется на шаге ЧТЕНИЕ.Я принимаю это, поскольку BQ проверяет условие ПЕРЕД материализацией каждой строки.

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

Быстрый запрос с простым предикатом:

SELECT *
FROM `sales`
WHERE 
  sales_date = '2018-12-01' -- partition pruning condition
  AND phone_number = '5552859865' -- lookup by phone number
LIMIT 10

Медленный запрос с тем же предикатом, поступающим через широковещательное соединение.Это не реальный запрос, он создан просто для демонстрации проблемы.Если условие «если» опущено, BQ понимает, что может использовать константу, и использует предикат pushdown.

SELECT t.*
FROM (
  SELECT if(tran_num is null, '555', '5552859865') as phone_number
  FROM `sales`
  WHERE sales_date = '2018-12-01'
  LIMIT 1) t0
JOIN `sales` t USING (phone_number)
WHERE sales_date = '2018-12-01'
LIMIT 1000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...