如何在Snowflake中避开ACCOUNT_USAGE延迟,关联查询对象与标签?
在Snowflake中通过INFORMATION_SCHEMA关联查询对象与标签(无需硬编码)
完全可行,核心思路是利用INFORMATION_SCHEMA的系统视图批量获取目标对象清单,再通过LATERAL JOIN结合TAG_REFERENCES表函数,实现对象信息与标签信息的关联查询,避免硬编码对象名称。
示例1:查询所有数据库的GT_OWNER标签
SELECT d.database_name, tr.tag_name, tr.tag_value FROM INFORMATION_SCHEMA.DATABASES d, LATERAL TABLE(TAG_REFERENCES(CONCAT('"', d.database_name, '"'), 'DATABASE')) tr WHERE tr.tag_name = 'GT_OWNER' -- 可选:过滤特定标签,去掉则返回所有标签 ORDER BY d.database_name;
代码说明
INFORMATION_SCHEMA.DATABASES:返回当前账户下所有可访问的数据库清单CONCAT('"', d.database_name, '"'):拼接带引号的数据库标识符,兼容包含特殊字符或大小写敏感的对象名称LATERAL TABLE(TAG_REFERENCES(...)):对每个数据库实例调用表函数,查询其关联的标签信息- 若需要查询所有标签,直接移除
WHERE tr.tag_name = 'GT_OWNER'条件即可
扩展到其他对象类型
如果需要查询架构、表等其他对象的标签,只需替换对应的INFORMATION_SCHEMA视图和TAG_REFERENCES的对象类型参数:
查询所有架构的标签
SELECT s.catalog_name, s.schema_name, tr.tag_name, tr.tag_value FROM INFORMATION_SCHEMA.SCHEMATA s, LATERAL TABLE(TAG_REFERENCES(CONCAT('"', s.catalog_name, '"."', s.schema_name, '"'), 'SCHEMA')) tr ORDER BY s.catalog_name, s.schema_name;
查询所有表的标签
SELECT t.table_catalog, t.table_schema, t.table_name, tr.tag_name, tr.tag_value FROM INFORMATION_SCHEMA.TABLES t, LATERAL TABLE(TAG_REFERENCES(CONCAT('"', t.table_catalog, '"."', t.table_schema, '"."', t.table_name, '"'), 'TABLE')) tr ORDER BY t.table_catalog, t.table_schema, t.table_name;
权限要求
- 对目标对象(数据库、架构、表等)拥有
USAGE权限 - 对标签所在的架构(如
SF_UTILS/GLOBAL_TAGS)拥有USAGE权限
内容的提问来源于stack exchange,提问作者NickW
相关产品推荐
相关产品推荐

