Snowflake中如何查找所有依赖?含非视图/表类SELECT查询依赖
在Snowflake中查找临时SELECT语句对表的依赖
可行,针对未生成持久化对象(视图/表)的临时SELECT语句,你可以通过查询历史和解析查询计划来追踪它们对指定表的依赖,具体方法如下:
方法1:通过查询历史文本匹配快速筛选
利用Snowflake的账户级或会话级查询历史视图,筛选包含目标表的SELECT语句。这种方法适合快速排查,但可能存在文本误匹配的情况。
示例SQL:
SELECT query_id, query_text, user_name, start_time FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY WHERE query_type = 'SELECT' -- 替换为你的目标表完整限定名,避免误匹配 AND query_text ILIKE '%MY_DB.MY_SCHEMA.MY_TABLE%' -- 限定时间范围,减少数据量提升查询速度 AND start_time >= DATEADD(day, -30, CURRENT_TIMESTAMP()) ORDER BY start_time DESC;
如果需要查看最近1小时的会话内查询,可改用会话级视图:
SELECT query_id, query_text, start_time FROM INFORMATION_SCHEMA.QUERY_HISTORY WHERE query_type = 'SELECT' AND query_text ILIKE '%MY_DB.MY_SCHEMA.MY_TABLE%' ORDER BY start_time DESC;
方法2:解析查询计划实现精确依赖追踪
通过解析查询计划中的引用对象,能精准定位哪些SELECT语句引用了目标表,避免文本匹配的误判。
示例SQL:
SELECT qh.query_id, qh.query_text, qh.user_name, qh.start_time, -- 提取被引用的表完整名称 rp.value:objectName::STRING AS referenced_table FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY qh, -- 展开查询计划节点 LATERAL FLATTEN(input => PARSE_JSON(qh.query_plan):QueryPlan:Nodes) nodes, -- 展开节点中的引用对象 LATERAL FLATTEN(input => nodes.value:References) rp WHERE qh.query_type = 'SELECT' -- 替换为目标表的完整限定名 AND rp.value:objectName::STRING = 'MY_DB.MY_SCHEMA.MY_TABLE' AND qh.start_time >= DATEADD(day, -30, CURRENT_TIMESTAMP()) ORDER BY qh.start_time DESC;
注意事项
- 数据延迟:账户级
SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY存在15-60分钟的数据延迟,若需实时查询,优先使用会话级INFORMATION_SCHEMA.QUERY_HISTORY。 - 权限要求:访问账户级查询历史需要
MONITOR USAGE权限,访问信息模式视图需要对应的SELECT权限。 - 数据保留期:账户级
QUERY_HISTORY默认保留1年,会话级视图仅保留最近1小时,SNOWFLAKE.INFORMATION_SCHEMA.QUERY_HISTORY保留最近7天。
内容的提问来源于stack exchange,提问作者kikee1222
相关产品推荐
相关产品推荐

