You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache Superset嵌入时出现ORA-00920无效关系运算符错误

Superset嵌入仪表盘时查询语句莫名新增WHERE (string)导致ORA-00920错误

我在Superset 3.0.1上创建了一个简易仪表盘,在平台内运行完全正常,对应的查询语句如下:

SELECT anon_1."ID_TIPO_ACCESO"
FROM
  (SELECT "ID_TIPO_ACCESO" AS "ID_TIPO_ACCESO"
   FROM f_matricula
   GROUP BY "ID_TIPO_ACCESO") anon_1
WHERE ROWNUM <= 1000;

我已经配置了Superset的嵌入功能,用Java+Tomcat开发后端服务生成guestToken,再通过包含iframe的HTML文件加载仪表盘。但通过这个HTML访问时,Superset返回Unexpected error: Error: ORA-00920: invalid relational operator,此时执行的查询语句被自动插入了一段无效的WHERE (string):

SELECT anon_1."ID_TIPO_ACCESO"
FROM
  (SELECT "ID_TIPO_ACCESO" AS "ID_TIPO_ACCESO"
   FROM f_matricula
   WHERE (string)
   GROUP BY "ID_TIPO_ACCESO") anon_1
WHERE ROWNUM <= 1000;

手动移除WHERE (string)后,语句在SqlDeveloper中可以正常执行。

可能的原因分析

  • 行级安全规则配置错误:检查给guest用户分配的角色,是否配置了行级过滤(RLS)规则。如果规则里存在未正确填充的占位符或者语法错误(比如直接写了(string)这种无效表达式),Superset在嵌入时会自动把错误规则插入到查询中。
  • Guest Token生成参数错误:生成guestToken的代码中,filters参数格式或内容有误。比如构造payload时,过滤条件的key/value被错误设置为string,导致Superset解析后生成了无效的WHERE子句。
  • 嵌入过滤器模板问题:如果仪表盘配置了嵌入专用的过滤器模板,模板里可能有未正确替换的变量,最终被渲染成(string)这种无效片段。
  • Superset版本bug:Superset 3.0.1可能存在嵌入场景下的查询生成bug,可以去官方issue列表查一下有没有类似问题,或者升级到更高版本验证是否解决。

排查建议

  • 先检查生成guestToken的代码,确认filters字段的结构是否正确(比如应该是[{"col": "字段名", "op": "=", "val": "xxx"}]这类格式),有没有错误传入字符串类型的无效值。
  • 登录Superset后台,查看guest角色的行级安全规则,确保所有规则都是有效的SQL条件,没有遗漏占位符或语法错误。
  • 尝试在生成guestToken时不传递任何过滤参数,测试是否还会出现这个问题,排除参数错误的可能性。
  • 检查仪表盘的嵌入配置,确认过滤器模板没有未定义的变量或错误语法。

内容的提问来源于stack exchange,提问作者Angel Pernía

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 14:40:16