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
相关产品推荐
相关产品推荐

