【问题标题】:Problems with planner and ddl statements in Apache CalciteApache Calcite 中规划器和 ddl 语句的问题
【发布时间】:2020-04-09 00:14:03
【问题描述】:

当我尝试验证包含“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 语句来验证查询?

【问题讨论】:

  • 如果您提供完整的查询和调用规划器 API 的代码 sn-p,您的问题会更容易理解。

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


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢,这对我有帮助。我做了修改,在执行 DDL 查询时不使用 CalciteValidator
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-05
  • 1970-01-01
  • 2021-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多