Calcite разбирает sql на части для мульти источника данных - PullRequest
0 голосов
/ 25 мая 2019

В моем случае я запрашиваю данные из нескольких источников данных (например, csv+mysql) через один sql. Как отличить источник данных для таблиц и определить, какие столбцы запрашиваются в таблицах с помощью Calcite? (Доступны метаданные источника данных)

Результат, который мне потребовался, примерно такой:
- Таблица A (col1, col2, col3) -> Источник данных CSV
- ТаблицаB (col1, colx, coly) -> Источник данных Mysql

Мой случай похож на то, что делает Apache Drill (использует Calcite), я пытался прочитать исходный код Drill, но не могу найти способ, как Drill определяет отношения.

String sql = "select c.c1, m.c2 from csv.tbl as c, mysql.schema.tbl as m where c.id = m.id”;

Frameworks.ConfigBuilder configBuilder = Frameworks.newConfigBuilder();
configBuilder.defaultSchema(`my SchemaPlus here`);
FrameworkConfig frameworkConfig = configBuilder.build();
Planner planner = Frameworks.getPlanner(frameworkConfig);

SqlNode sqlNode = planner.parse(sql);
planner.validate(sqlNode);
RelRoot relRoot = planner.rel(sqlNode);

Это то, что у меня сейчас есть, но, похоже, я ничего не хотел там ~ _ ~ |||

Большое спасибо.

1 Ответ

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

Если у вас есть вопросы, может ли Calcite автоматически расшифровать, какие столбцы вы используете, если вы не добавите эту информацию в свой SQL-запрос, это невозможно. Предполагается, что вы используете схему по умолчанию и попытаетесь отобразить ее там. Если вы используете несколько схем, это глупо (не плохо), и вы должны сказать ему, что делать. Вы должны написать свой SQL-запрос так, чтобы он содержал эту информацию, как и вы.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...