一次在 Snowflake 中删除多种文件格式

Dropping multiple file formats in Snowflake at once

我需要在 Snowflake 中删除特定模式的多种文件格式(大约 70 种)。我浏览了文档并尝试了一些变通方法,但找不到任何自动执行的方法。

示例:

schema - work

file formats - work_123, work_234, preview_567, preview_561, match_897, match_565

这不是完全自动化的 - 但如果这是一次性任务,则编写一个存储过程来完全自动化它可能有点矫枉过正。

  1. 运行 显示文件格式

  2. 根据上一个命令的结果构造删除语句:

    SELECT 'DROP FILE FORMAT '||"名称"||';' 来自 table(result_scan(last_query_id()));

  3. 复制上一步的输出并运行它到你的UI

它可以通过 Snowflake 脚本实现完全自动化:

DECLARE 
    SCHEMA_NAME STRING := 'WORK';
    FORMAT_NAME_PATTERN STRING := '%';
    QUERY STRING;
BEGIN
    SELECT CONCAT('BEGIN', CHAR(10)
             ,LISTAGG(CONCAT('DROP FILE FORMAT IF EXISTS '
                     ,FILE_FORMAT_SCHEMA, '.', FILE_FORMAT_NAME, ';', CHAR(10)), '')
             ,'END')
    INTO :QUERY
    FROM INFORMATION_SCHEMA.FILE_FORMATS
    WHERE FILE_FORMAT_SCHEMA ILIKE :SCHEMA_NAME
      AND FILE_FORMAT_NAME ILIKE :FORMAT_NAME_PATTERN ESCAPE '!'
    GROUP BY GROUPING SETS(());

  QUERY := COALESCE(QUERY, 'SELECT ''No file format found''');

  -- Uncomment to run
  -- EXECUTE IMMEDIATE :QUERY;
  RETURN :QUERY;
END;  

示例数据:

CREATE SCHEMA WORK;


CREATE FILE FORMAT work_123 TYPE=csv;
CREATE FILE FORMAT work_232 TYPE=csv;
CREATE FILE FORMAT preview_567 TYPE=JSON;

要执行的查询是:

BEGIN
DROP FILE FORMAT IF EXISTS WORK.PREVIEW_567;
DROP FILE FORMAT IF EXISTS WORK.WORK_123;
DROP FILE FORMAT IF EXISTS WORK.WORK_232;
END

第一个运行:

后续运行: