Я использую Apache Calcite для реализации распределенной системы OLAP, источником данных которой является RDBMS. Итак, я хочу понизить проект/фильтр/агрегацию в дереве RelNode
до MyTableScan extends TableScan
. В MyTableScan
используйте RelBuilder
, чтобы получить RelNode
. Наконец, RelBuilder
сгенерируйте запрос к исходной базе данных. В то же время проект/фильтр/агрегация в исходном дереве RelNode
должны быть перемещены или изменены.
Насколько мне известно, Calcite не поддерживает эту функцию.
Текущие ограничения. Адаптер JDBC в настоящее время выполняет только операции сканирования таблицы; вся остальная обработка (фильтрация, объединение, агрегация и т. д.) выполняется в Calcite. Наша цель — перенести как можно больше обработки в исходную систему, переводя синтаксис, типы данных и встроенные функции по мере продвижения. Если запрос Calcite основан на таблицах из одной базы данных JDBC, в принципе, весь запрос должен направляться в эту базу данных. Если таблицы получены из нескольких источников JDBC или из комбинации JDBC и не-JDBC, Calcite будет использовать наиболее эффективный из возможных подходов к распределенным запросам.
На мой взгляд, RelOptRule
может быть хорошим выбором. К сожалению, когда я создаю новый RelOptRule
, я не могу легко найти родительский узел, чтобы удалить узел.
RelOptRule
хороший выбор? У кого-нибудь есть хорошая идея реализовать эту функцию?
Спасибо.