跨数据源关联查询, 字段为关键词情况报错。

V2.10 docker 单机安装.

有个sql 语句需要通过列 month 进行过滤筛选:
默认: month = ‘2024-12-01’
列包含: month = ‘2024-12-01’
表别名: a.month = ‘2024-12-01’
均不能正常查询,(单语句运行没问题, 关联时报错)

使用 Calcite 进行语法分析发生了异常:org.apache.calcite.sql.parser.SqlParseException: Encountered “month =” at line 1, column 320. Was expecting one of: “ARRAY” … “CASE” … “CURRENT” … “CURRENT_CATALOG” … “CURRENT_DATE” … “CURRENT_DEFAULT_TRANSFORM_GROUP” … “CURRENT_PATH” … “CURRENT_ROLE” … “CURRENT_SCHEMA” … “CURRENT_TIME” … “CURRENT_TIMESTAMP” … “CURRENT_USER” … “EXISTS” … “LOCALTIME” … “LOCALTIMESTAMP” … “MULTISET” … “NEW” … “NEXT” … “NOT” … “PERIOD” … “SESSION_USER” … “SYSTEM_USER” … “UNIQUE” … “USER” … <LBRACE_FN> … “?” … “+” … “-” … <BRACKET_QUOTED_IDENTIFIER> … <QUOTED_IDENTIFIER> … <BACK_QUOTED_IDENTIFIER> … <BIG_QUERY_BACK_QUOTED_IDENTIFIER> … <HYPHENATED_IDENTIFIER> … … <UNICODE_QUOTED_IDENTIFIER> … “INTERVAL” … <UNSIGNED_INTEGER_LITERAL> … <DECIMAL_NUMERIC_LITERAL> … <APPROX_NUMERIC_LITERAL> … <BINARY_STRING_LITERAL> … <PREFIXED_STRING_LITERAL> … <QUOTED_STRING> … <UNICODE_STRING_LITERAL> … <C_STYLE_ESCAPED_STRING_LITERAL> … <BIG_QUERY_DOUBLE_QUOTED_STRING> … <BIG_QUERY_QUOTED_STRING> … “TRUE” … “FALSE” … “UNKNOWN” … “NULL” … <LBRACE_D> … <LBRACE_T> … <LBRACE_TS> … “DATE” … “DATETIME” … “TIME” … “TIMESTAMP” … “CAST” … “SAFE_CAST” … “TRY_CAST” … “EXTRACT” … “POSITION” … “CONVERT” … “TRANSLATE” … “OVERLAY” … “FLOOR” … “CEIL” … “CEILING” … “SUBSTRING” … “TRIM” … “CLASSIFIER” … “MATCH_NUMBER” … “RUNNING” … “PREV” … “JSON_EXISTS” … “JSON_VALUE” … “JSON_QUERY” … “JSON_OBJECT” … “JSON_OBJECTAGG” … “JSON_ARRAY” … “JSON_ARRAYAGG” … “SPECIFIC” … “ABS” … “AVG” … “CARDINALITY” … “CHAR” … “CHAR_LENGTH” … “CHARACTER_LENGTH” … “COALESCE” … “COLLECT” … “COVAR_POP” … “COVAR_SAMP” … “CUME_DIST” … “COUNT” … “DENSE_RANK” … “ELEMENT” … “EVERY” … “EXP” … “FIRST_VALUE” … “FUSION” … “INTERSECTION” … “GROUPING” … “HOUR” … “LAG” … “LEAD” … “LEFT” … “LAST_VALUE” … “LN” … “LOWER” … “MAX” … “MIN” … “MINUTE” … “MOD” … “MONTH” “.” … “MONTH” … “MONTH” “(” …

后来没有办法了, 干脆想查所有. 但是month 仍然不能放到 select 内, 只要放了就报错,
select month
select month
都报错:

SQL执行失败,请检查表、字段、关联关系等信息是否正确并重新编辑。Error while preparing statement [SELECT DE_STR_TO_DATE(CONCAT(t_a_0.f_52413a8cd83a5543, ’ 00:00:00’),‘yyyy-MM-dd HH:mm:ss’) AS f_ax_0, t_a_0.f_834498bc92ef773e AS f_ax_1, t_a_0.f_9b740ebcc301c34e AS f_ax_2, CAST(t_a_0.f_7f3142febd908d29 AS

估计month 被识别成关键词了, 那么这种 特殊词 的过滤条件如何编写?

能发下你的 sql 语句吗

数据源1:

select
purchaser_name
from monthly_report_sales
where
month = ‘2024-12-01’
limit 10

数据源2:
select name from users where status =1

通过 数据源1 purchaser_name 与 数据源2 name 级联.
我将sql 做到最简化了, 还是报同样的错误. 就是 month 这个关键词导致, 但是不知道如何特殊处理,总不能该列名吧

这个month 是关键字在,用 `` 括起来试试。

试过了的, 用 `` 包含起来 或者 表别名 点出来 都不行。

别沉下去了, 看看有什么解决方案。

关键字不能用了,你要换一个名称。

没有其他方案吗? 列名肯定是不能随便改的, 否则影响实际业务系统了。

month用双引号括起来试试呢

这个肯定不行, 双引号变字符串了。 不过我也试了, 没报错但是结果为空了。
“month” = ‘2024-12’ 这个等式 直接就意味着 where 1=2 了。

嵌套一层试试呢,比如:

select purchaser_name from (
select
purchaser_name,month as mm
from monthly_report_sales) t
where
t.mm = ‘2024-12-01’
limit 10