我在 ClickHouse 代理上工作,它将在将查询发送到 ClickHouse 之前验证和修改查询。为了实现验证逻辑,我需要知道用户请求哪些列。当用户在 select 中使用
*
时,问题就出现了。
对于像
select * from table
这样的简单查询,我可以自己扩展*
并将原始查询转换为例如select a,b,c from table
。
了解表和列的名称,并可以检查用户的权限是否可以访问这些列。但是如何处理包含许多连接、子查询等的复杂查询。我希望 ClickHouse 中可能有一个功能,允许在执行之前进行
dry-run
查询,然后 ClickHouse 会解析、分析、优化原始 SQL 并生成扩展 SQL没有*
。
我在 ClickhHouse 文档中找不到类似的内容。我使用 sqlglot 库来转换 AST。有什么想法可以解决我的问题吗?
提前谢谢您
我问了在 ClickHouse 工作的人。您可以在 ClickHouse 中运行
EXPLAIN <query>
,但不知道 ClickHouse 之外是否有独立的解析器。因为此结果需要表架构定义。