Apache Calcite: преобразование дерева синтаксического анализа SQL в дерево реляционных выражений БЕЗ проверки

В настоящее время я работаю над проектом, в котором я хочу проанализировать SQL-запрос и создать для него дерево реляционных выражений. Основная цель — определить партнеров по присоединению в запросах. Итак, я хотел бы подтолкнуть выражения соединения к листьям дерева. Для этого я решил использовать Apache Calcite. Мой код выглядит примерно так на данный момент:

Planner planner = Frameworks.getPlanner(Frameworks.newConfigBuilder().defaultSchema(Frameworks.createRootSchema(false)).build());

SqlNode parsed = planner.parse("SELECT s.dnasamplename, e.Total_expression_level, e.Soluble_expression_level, s.id " +
            "FROM table1 e" +
            "JOIN table2 s on s.constructname = e.Clone_name" +
            "WHERE e.Total_expression_level like '0:%'");

planner.validate(parsed);

RelRoot relRoot = planner.rel(parsed);

Если я попытаюсь выполнить rel-метод Планировщика напрямую, я получаю сообщение об ошибке, что сначала нужно проверить запрос. И тут я сталкиваюсь с проблемами. У меня нет действительной схемы. Я просто хочу преобразовать запрос в реляционный план запроса. Есть ли способ пропустить процесс проверки?


person hjk    schedule 25.11.2016    source источник


Ответы (1)


Невозможно пропустить процесс проверки. Преобразователь SQL в реляционный использует состояние, которое ранее было создано средством проверки.

Люди видят, что валидатор выдает исключение, если SQL недействителен, и воображают, что это его единственная цель; но построение государства не менее важно. Состояние включает карту типа каждого SqlNode, расширения "*" и "tableAlias.*" в предложениях SELECT и полные идентификаторы.

Если ваша схема отсутствует или неполная, вы можете попробовать аналогичный подход к Apache Drill. Если валидатор запрашивает определенный столбец таблицы, а в таблице нет этого столбца, пространство имен Calcite для этой таблицы говорит: «Да, у меня есть этот столбец!» и добавляет его. Таким образом, процесс проверки проходит успешно, и каждое пространство имен имеет список дополнительных столбцов, необходимых для запроса.

person Julian Hyde    schedule 26.11.2016