Как работает предикатный pushdown? - PullRequest
0 голосов
/ 15 февраля 2019

Может ли кто-нибудь объяснить на примерах, как именно работает предикатный pushdown?

1 Ответ

0 голосов
/ 15 февраля 2019

Скажем, вы хотите выполнить запрос

SELECT 
  SUM(price) 
FROM sales 
WHERE 
  purchase_date BETWEEN '2018-01-01' and '2018-01-31';

Очень тривиальная реализация механизма запросов - перебирать все файлы паркета / орка, десериализовать столбцы price и purchase_date, применятьпредикат на purchase_date и суммирование отфильтрованных строк.

Паркет (не уверен насчет orc) ведет статистику по столбцам в каждом файле, поэтому, если механизм выполнения достаточно умен, он может посмотреть на min /Максимум purchase_date в статистике и определить, будут ли совпадать какие-либо строки.Например, если purchase_date.min=2014-05-05 и purchase_date.max=2014-05-06, это может сделать вывод, что предикат всегда будет иметь значение false.

Другими словами, он может пропускать файлы паркета, комбинируя статистику и предикат фильтра.Это может привести к значительному увеличению производительности, поскольку узким местом обычно является IO (файл или память).Коэффициент усиления обратно пропорционален селективности (проценту совпадающих строк).

Термин «предикат предиката» происходит от того факта, что вы «намекаете» оператору сканирования с помощью предиката, который затемиспользоваться для фильтрации интересующих строк.Или, отправив предикат на сканирование.

...