【问题标题】:Snowflake - Query to check if given schema is empty i.e. no object in schemaSnowflake - 查询给定模式是否为空,即模式中没有对象
【发布时间】:2021-07-22 13:52:27
【问题描述】:
我正在尝试创建单个查询,该查询可以判断给定的雪花模式是否为空,以便可以将其删除。
我创建了几个 SQL 来查询 INFORMATION_SCHEMA 视图 - 表、视图、序列来检查是否创建了任何对象。通过这种方式,我必须创建多个查询,如果它在给定模式中有表/视图,则返回标志值。此查询变得冗长且多次点击。
我正在寻找可以告诉我给定架构是否为空的单个查询?
【问题讨论】:
标签:
snowflake-cloud-data-platform
snowflake-schema
【解决方案1】:
我正在寻找可以告诉我给定架构是否为空的单个查询?
您可以编写在INFORMATION_SCHEMA 中搜索的单个查询:
SET schema_name = 'MY_SCHEMA';
SELECT $schema_name AS schema_name,
CASE WHEN EXISTS (
SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA ILIKE $schema_name
UNION ALL
SELECT 1 FROM INFORMATION_SCHEMA.SEQUENCES WHERE SEQUENCE_SCHEMA ILIKE $schema_name
UNION ALL
-- all information_schema tables tasks/sequences/functions/streams/...
) THEN 0
ELSE 1
END is_empty;
或者使用SHOW:
SHOW TABLES IN SCHEMA 'schema_name';
SHOW TASKS IN SCHEMA 'schema_name;
-- ... all SHOW commands
SELECT 1 FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
UNION ALL
SELECT 1 FROM TABLE(RESULT_SCAN(LAST_QUERY_ID(-2)))
...
-- if returns 1 it means that at least one SHOW command returned rows
-- therefore it contains object in schema
警告!
这两种方法都可能返回假阴性,因为您只能看到您有权访问的对象。