如何阻止DBeaver在执行自定义查询前触发元数据查询?
解决DBeaver中Snowflake LAST_QUERY_ID()被元数据查询干扰的问题
问题背景
使用Snowflake时,原本可以通过以下语句将SHOW的结果转为常规SQL查询:
SHOW WAREHOUSES; SELECT * FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) WHERE "auto_suspend" IS NULL;
但在DBeaver中执行时,LAST_QUERY_ID()总是返回SELECT CURRENT_DATABASE(), CURRENT_SCHEMA()的查询ID——这是因为DBeaver会在每次用户查询前自动执行该元数据查询,覆盖了最新的查询ID。
解决方法
1. 关闭DBeaver的自动元数据查询
通过修改连接设置,阻止DBeaver在后台自动执行上下文查询:
- 右键点击你的Snowflake连接,选择「编辑连接」
- 切换到「高级」或「元数据」标签页(不同版本路径可能略有差异)
- 找到类似「在执行查询前获取当前数据库/ Schema」或「自动刷新上下文」的选项,取消勾选
- 保存设置后重新连接数据库
注意:关闭该功能后,DBeaver的导航面板可能不会自动同步当前库/ Schema的变化,需要手动右键刷新,但能彻底解决查询ID被干扰的问题。
2. 用会话变量保存查询ID(更可靠的替代方案)
如果不想修改DBeaver设置,可以通过会话变量直接保存SHOW语句的查询ID,避免依赖LAST_QUERY_ID()的偏移量:
SHOW WAREHOUSES; SET @last_show_query_id = LAST_QUERY_ID(); SELECT * FROM TABLE(RESULT_SCAN($last_show_query_id)) WHERE "auto_suspend" IS NULL;
这种方式不受DBeaver后台查询的影响,比手动指定LAST_QUERY_ID(-2)更灵活可靠。
内容的提问来源于stack exchange,提问作者Eric Mamet
相关产品推荐
相关产品推荐

