кальцит эластичный поиск адаптер эффективное соединение - PullRequest
0 голосов
/ 15 ноября 2018

Как правильно переписать JOIN, чтобы запрос получал результаты подзапроса? Например:

SELECT state  FROM zips_view WHERE j IN (select j from people_view)

Этот запрос переписывается в SemiJoin, который выполняет внутренний запрос сканирования таблицы (выберите снова _people_view_, как и ожидалось), а затем снова сканирование таблицы для внешнего запроса (выберите против _zips_view_). Второе сканирование может быть заменено фильтрованным запросом, например,

SELECT state FROM zips_iew WHERE j IN (1,2,3,4)

Как правильно реализовать "двухфазное" соединение, которое берет результаты подзапроса и добавляет их к внешнему запросу в качестве фильтра / условия?

1 Ответ

0 голосов
/ 16 мая 2019

Я использую разъем JDBC здесь, и для вашего желаемого запроса:

SELECT state FROM zips_iew WHERE j IN (1,2,3,4)

генерирует эту реляционную алгебру:

LogicalProject(state=[$0])
  LogicalFilter(condition=[OR(=($0, 1), =($0, 2), =($0, 3), =($0, 4))])
    JdbcTableScan(table=[[zips_iew, state]])

Вы должны начать с написания правил, которые преобразуют вашу исходную реляционную алгебру (с SemiJoin) и пройти путь вниз, чтобы получить реляционную алгебру, которая выглядит как выше.

...