Apache Superset执行ClickHouse带TOP 2查询报DDL/DML不允许错误
Superset中ClickHouse带TOP的查询被误判为非只读操作的原因及解决
问题现象
在Apache Superset中执行针对ClickHouse的查询:
select top 2 storage_name from proxy_space;
会触发错误提示:
DB engine Error This database does not allow for DDL/DML, and the query could not be parsed to confirm it is a read-only query. Please contact your administrator for more assistance.
但移除top 2后执行以下查询则完全正常:
select storage_name from proxy_space;
原因说明
Superset通过内置的SQL解析器判断查询是否为只读操作,以此限制DDL/DML执行。问题出在语法适配层面:
- ClickHouse本身支持
SELECT TOP语法,但Superset的只读校验逻辑仅覆盖了标准SQL的SELECT ... LIMIT写法,未对TOP语法做适配,导致解析时无法识别这是只读的SELECT查询,进而误判为可能包含DDL/DML的操作。 - 这属于Superset对ClickHouse语法兼容的覆盖不全,确实是个Bug。
临时解决方法
把TOP语法替换为ClickHouse同样支持的LIMIT写法即可绕过这个问题:
select storage_name from proxy_space limit 2;
内容的提问来源于stack exchange,提问作者ka3ak
相关产品推荐
相关产品推荐

