Apache Calcite 查询解析器 - 意外的字符双引号
Apache Calcite query parser - Unexpected character double quotes
我正在使用 Apache Calcite
对不同的数据源执行查询。
我使用的模型文件是
inline: {
version: '1.0',
defaultSchema: 'sakila',
schemas: [
{
name: 'sakila',
type: 'custom',
factory: 'org.apache.calcite.adapter.jdbc.JdbcSchema$Factory',
operand: {
jdbcDriver: 'org.postgresql.Driver',
jdbcUrl: 'jdbc:postgresql://localhost:5432/sakila',
jdbcUser: 'postgres',
jdbcPassword: 'postgres'
}
}
]
}
而查询是
select
"sakila"."actor"."first_name" as "actor_first_name"
from
"sakila"."actor"
由于对表和列应用了双引号,上述查询无法正常工作。所以,我不得不删除引号,下面的查询工作正常。
select
sakila.actor.first_name as actor_first_name
from
sakila.actor
这里的问题是查询解析器不允许某些没有双引号的查询。在某些情况下,如上述,它不需要报价即可正确执行。任何人都可以深入了解为什么会这样吗?
我怀疑原因是区分大小写。假设 Calcite 处于其默认词法模式,如果您删除标识符周围的引号,Calcite 将在尝试查找 tables 和具有这些名称的列之前将它们转换为大写。你说它没有引号就可以工作,所以我假设你的架构 table 和列是大写的 (SAKILA, ACTOR, FIRST_NAME).
您可以通过将 caseSensitive=false 作为 Calcite JDBC 连接字符串的一部分来要求 Calcite 不区分大小写。
我正在使用 Apache Calcite
对不同的数据源执行查询。
我使用的模型文件是
inline: {
version: '1.0',
defaultSchema: 'sakila',
schemas: [
{
name: 'sakila',
type: 'custom',
factory: 'org.apache.calcite.adapter.jdbc.JdbcSchema$Factory',
operand: {
jdbcDriver: 'org.postgresql.Driver',
jdbcUrl: 'jdbc:postgresql://localhost:5432/sakila',
jdbcUser: 'postgres',
jdbcPassword: 'postgres'
}
}
]
}
而查询是
select
"sakila"."actor"."first_name" as "actor_first_name"
from
"sakila"."actor"
由于对表和列应用了双引号,上述查询无法正常工作。所以,我不得不删除引号,下面的查询工作正常。
select
sakila.actor.first_name as actor_first_name
from
sakila.actor
这里的问题是查询解析器不允许某些没有双引号的查询。在某些情况下,如上述,它不需要报价即可正确执行。任何人都可以深入了解为什么会这样吗?
我怀疑原因是区分大小写。假设 Calcite 处于其默认词法模式,如果您删除标识符周围的引号,Calcite 将在尝试查找 tables 和具有这些名称的列之前将它们转换为大写。你说它没有引号就可以工作,所以我假设你的架构 table 和列是大写的 (SAKILA, ACTOR, FIRST_NAME).
您可以通过将 caseSensitive=false 作为 Calcite JDBC 连接字符串的一部分来要求 Calcite 不区分大小写。