You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何识别Snowflake中SQL所引用的所有数据库与对象?

如何识别Snowflake中SQL查询引用的所有数据库/对象

方法1:利用QUERY_HISTORY中的QUERY_OBJECT_REFERENCES字段

Snowflake的QUERY_HISTORY视图(优先使用ACCOUNT_USAGE下的版本,覆盖范围比INFORMATION_SCHEMA更广)包含QUERY_OBJECT_REFERENCES变体字段,它会记录SQL执行时实际解析后的所有对象引用——包括通过变量、IDENTIFIER()函数动态生成的对象名,直接解决你之前解析原始SQL文本的局限性。

示例查询

以下查询会展开QUERY_OBJECT_REFERENCES数组,提取每个引用对象的数据库、模式、名称和类型:

SELECT
    qh.query_id,
    qh.query_text,
    obj.value:database_name::STRING AS referenced_database,
    obj.value:schema_name::STRING AS referenced_schema,
    obj.value:object_name::STRING AS referenced_object,
    obj.value:object_type::STRING AS object_type
FROM
    account_usage.query_history qh,
    LATERAL FLATTEN(input => qh.query_object_references) obj
WHERE
    qh.execution_status = 'SUCCESS'
    -- 可选:过滤时间范围或查询类型
    AND qh.start_time >= DATEADD(day, -7, CURRENT_TIMESTAMP)
ORDER BY
    qh.start_time DESC;

注意事项

  • 权限要求:需要MONITOR USAGE账户权限,或对目标数据库/模式拥有USAGE权限才能查看对应对象引用。
  • 数据延迟:ACCOUNT_USAGE视图通常有1-2小时延迟,如果需要实时数据,可改用INFORMATION_SCHEMA.QUERY_HISTORY(仅包含当前会话/用户的最近查询),该视图同样支持QUERY_OBJECT_REFERENCES字段。

方法2:结合QUERY_HISTORY与ACCESS_HISTORY(追踪细粒度对象访问)

如果需要更详细的对象访问记录(比如区分读/写操作),可以使用ACCOUNT_USAGE.ACCESS_HISTORY视图,它会记录每个查询对对象的具体访问类型,并关联到查询ID。

示例查询

SELECT
    ah.query_id,
    qh.query_text,
    ah.object_name,
    ah.database_name,
    ah.schema_name,
    ah.access_type
FROM
    account_usage.access_history ah
JOIN
    account_usage.query_history qh ON ah.query_id = qh.query_id
WHERE
    qh.execution_status = 'SUCCESS'
    AND ah.start_time >= DATEADD(day, -7, CURRENT_TIMESTAMP)
ORDER BY
    ah.start_time DESC;

注意事项

  • ACCESS_HISTORY仅记录表、视图、物化视图等对象的访问,不包含存储过程、函数内部的引用。
  • 同样存在数据延迟,且需要MONITOR USAGE权限。

为什么之前的方法失效

  • 解析SQL_TEXT:无法处理动态生成的对象名(变量、IDENTIFIER()函数),这类对象名是在查询执行时才解析的,原始SQL文本中只有占位符。
  • DATABASE_NAME字段:仅记录查询执行时的上下文数据库,而非SQL实际引用的所有数据库。

内容的提问来源于stack exchange,提问作者Ankit Srivastava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 01:10:32