【问题标题】: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
    

    警告!

    这两种方法都可能返回假阴性,因为您只能看到您有权访问的对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多