首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache Calcite:无需验证即可将SQL解析树转换为关系表达式树

Apache Calcite:无需验证即可将SQL解析树转换为关系表达式树
EN

Stack Overflow用户
提问于 2016-11-25 19:44:13
回答 1查看 1.2K关注 0票数 2

我目前正在做一个项目,我想在其中解析一个SQL查询,并为它创建关系表达式树。主要目标是识别查询中的联接伙伴。所以我想把连接表达式下推到树的叶子上。为了实现这一点,我决定使用Apache方解石。我的代码目前大致如下所示:

代码语言:javascript
复制
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);

如果我尝试直接执行Planner的rel方法,我得到的错误是我必须首先验证查询。这就是我遇到麻烦的地方。我没有有效的架构。我只想将查询转换为关系查询计划。有没有一种方法可以跳过验证过程?

EN

回答 1

Stack Overflow用户

发布于 2016-11-26 08:08:38

不可能跳过验证过程。sql-to-relational转换器依赖于验证器先前创建的状态。

人们看到,如果SQL无效,验证器就会抛出异常,并认为这是它的唯一目的;但构建状态也同样重要。状态包括每个表的类型的映射、SELECT子句中"*“和”SqlNode Alias.*“的扩展以及完全限定标识符。

如果您的模式缺失或不完整,您可以尝试一种类似的Apache Drill方法。如果验证器请求某个表的特定列,而该表没有该列,则该表的方解石名称空间会说“是的,我有该列!”并添加它。因此,验证过程成功,并且每个名称空间都有查询所需的额外列的列表。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40804289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档