java - Apache Calcite 中的 planner 和 ddl 语句存在问题

标签 java ddl create-table apache-calcite query-planner

当我尝试验证包含“CREATE TABLE”的 sql 语句时,它会抛出错误:

java.lang.AssertionError: Was not expecting value 'CREATE_TABLE' for enumeration 'org.apache.calcite.sql.SqlKind' in this context

    at org.apache.calcite.util.Util.unexpected(Util.java:1773)
    at org.apache.calcite.sql.validate.SqlValidatorImpl.registerQuery(SqlValidatorImpl.java:2715)
    at org.apache.calcite.sql.validate.SqlValidatorImpl.registerQuery(SqlValidatorImpl.java:2381)
    at org.apache.calcite.sql.validate.SqlValidatorImpl.validateScopedExpression(SqlValidatorImpl.java:927)
    at org.apache.calcite.sql.validate.SqlValidatorImpl.validate(SqlValidatorImpl.java:633)
    at org.apache.calcite.prepare.PlannerImpl.validate(PlannerImpl.java:188)

我想知道是否可以使用方解石中的 ddl 语句验证查询?

最佳答案

从堆栈跟踪来看,您似乎正在使用 Planner 接口(interface)。目前,此接口(interface)不支持验证包含 DDL 元素的语句,因为它始终创建 CalciteSqlValidator 的实例。 .

为了使用 DDL 节点验证语句,您必须获取 ContextSqlValidator 的实例但目前没有高级 API 可以使用此服务。

通过 Calcite 连接执行的语句会通过 ContextSqlValidator,因此您可以通过调试 ServerTest 中的测试用例来了解如何实例化此类。 .

关于java - Apache Calcite 中的 planner 和 ddl 语句存在问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59358203/

相关文章:

sql - 在表中创建与特定模式匹配的列

java - 如何根据特定索引范围对 ArrayList<String> 进行排序

java - Spring Boot Thymeleaf 字符编码为 UTF-8

java - JWrapper "unpack200.exe not found"

java - 自动构建脚本以更新 postgres 中的数据库

mysql - 创建表时创建索引

java - 如何将带有文本的图标添加到滑动选项卡

sql - 什么是 DDL 和 DML?

sql - Oracle 约束允许每个外键值一次特定值

hive - 删除并重新创建 Hive 外部表,但未显示数据