Как использовать предикаты pushdown в коннекторе Presto - PullRequest
0 голосов
/ 17 февраля 2020

Я хотел бы расширить соединитель Presto example-http, чтобы добавить соответствующие предикаты к вызову API REST, выполняемому соединителем, чтобы минимизировать передачу данных.

Я трачу сейчас несколько часов на просмотр документация, онлайн-посты и исходный код Presto, но я не могу понять, какие вызовы связаны и как go об этом.

Это упоминается во многих местах, но я не могу найти ни простых примеров кода, ни внутренних описаний. Я уверен, что упускаю что-то очевидное здесь.

1 Ответ

0 голосов
/ 19 февраля 2020

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

Прямая часть заключается в том, что мы просто должны переопределить isPushdownFilterSupported и pushdownFilter при реализации интерфейса ConnectorMetadata.

Ограничительная часть заключается в том, что планировщик запросов теперь считает, что Разъем может иметь дело с любым типом и комбинацией настольных фильтров. В моем случае я хотел бы позаботиться только об этом, поддерживаемый мной удаленный API поддерживает, а Presto позаботится обо всем остальном.

Похоже, что команда Presto полностью осознает это, так как а) методы помечены @Experimental и б) соответствующими комментариями This interface can be replaced with a connector optimizer rule once the engine supports these (#12546). Это был бы явно правильный подход для моего варианта использования.

   /**
     * Experimental: if true, the engine will invoke pushdownFilter instead of getTableLayouts.
     *
     * This interface can be replaced with a connector optimizer rule once the engine supports these (#12546).
     */
    @Experimental
    default boolean isPushdownFilterSupported(ConnectorSession session, ConnectorTableHandle tableHandle)
    {
        return false;
    }

    /**
     * Experimental: returns table layout that encapsulates the given filter.
     *
     * This interface can be replaced with a connector optimizer rule once the engine supports these (#12546).
     */
    @Experimental
    default ConnectorPushdownFilterResult pushdownFilter(ConnectorSession session, ConnectorTableHandle tableHandle, RowExpression filter, Optional<ConnectorTableLayoutHandle> currentLayoutHandle)
    {
        throw new UnsupportedOperationException();
    }
...