apache-calcite - 如何更改 Calcite 的默认 sql 语法?”

标签 apache-calcite

如何改变Calcite默认的sql语法,支持“select func(id) as (a, b, c) from xx;”这样的sql语句

最佳答案

要更改 SQL 解析器接受的语法,您需要更改解析器。有两种方法可以做到这一点。

首先是 fork 项目并更改核心语法 Parser.jj 。但与往常一样,当你 fork 一个项目时,你有责任在每次升级到项目的新版本时重新应用你的更改。

二是使用Calcite项目提供的语法扩展点之一。 Calcite 的语法是用 JavaCC 编写的,但它首先通过 FreeMarker 模板引擎运行语法。扩展点是您的项目可以重新分配的模板中的变量。例如,如果要添加新的 DDL 命令,可以修改 createStatementParserMethods 变量,就像在 Calcite's parser extension test 中所做的那样:

  # List of methods for parsing extensions to "CREATE [OR REPLACE]" calls.
  # Each must accept arguments "(Span span, boolean replace)".
  createStatementParserMethods: [
    "SqlCreateTable"
  ]

使用这些方法中的哪一种?如果可以,绝对使用第二个,也就是说,如果您的语法更改发生在预定义的扩展点之一。仅在必须时才使用第一个,因为您会遇到维护语法分支的问题。

如果可能,看看 Calcite 是否会接受更改作为贡献。这是您的理想方案,因为 Calcite 将负责维护您的语法扩展。但他们可能只会接受您的更改,如果它是标准 SQL 或由一个或多个主要数据库实现的有用功能。他们将要求您的代码质量高并伴有测试。

关于apache-calcite - 如何更改 Calcite 的默认 sql 语法?”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44382826/

相关文章:

postgresql - 通过方解石在 postgres 中创建物化 View

java - 使用 CSV 使用 Calcite 创建流式传输示例

java - 如何构建 Apache 方解石 Excel 适配器

java - 找不到带有 apache 方解石的表

java - 如何在方解石中将项目、过滤器、聚合下推到 TableScan

java - 将 Kafka 与 Apache Calcite 集成

hadoop - Apache Calcite 和 Teradata 中的 SQL 查询

apache-calcite - 如何避免方解石在内存中进行聚合

sql - 如何在查询记录处理器中转换 DateTime

德鲁伊查询从第三列获取 "latest"值