簡體   English   中英

基於 Snowflake 中的模式匹配刪除模式

[英]Drop schemas based on pattern match in Snowflake

從 Snowflake (ANSI SQL) 中的數據庫中刪除具有用戶指定前綴的所有模式的最佳方法是什么?

假設您有一個名為ANALYTICS的數據庫,並且在該數據庫中有多個模式,例如: dev_bob_schema1dev_bob_schema2dev_alice_schema1

你怎么能只刪除那些預先添加dev_bob的模式?

我已經到了可以列出模式的階段:

use database "ANALYTICS";
select schema_name
from information_schema.schemata
where schema_name ilike 'dev_bob%'

但我無法克服循環響應並執行drop schema ...

我會做以下事情:

  1. USE DATABASE ...
  2. show schemas like ...
  3. SELECT 'DROP SCHEMA ' || "name" || ';' FROM table(result_scan(last_query_id()));

將輸出粘貼回工作表並運行它。

使用INFORMATION_SCHEMA.SCHEMATA和雪花腳本:

設置:

CREATE DATABASE ANALYTICS;
CREATE SCHEMA dev_bob_schema1;
CREATE SCHEMA dev_bob_schema2;
CREATE SCHEMA dev_bob_schema3;

詢問:

SELECT LISTAGG(CONCAT('DROP SCHEMA IF EXISTS ', SCHEMA_NAME, ';', CHAR(10)) , '') AS output
FROM INFORMATION_SCHEMA.SCHEMATA
WHERE SCHEMA_NAME ILIKE 'DEV_BOB_SCHEMA%';

輸出:

DROP SCHEMA IF EXISTS DEV_BOB_SCHEMA1; 
DROP SCHEMA IF EXISTS DEV_BOB_SCHEMA2; 
DROP SCHEMA IF EXISTS DEV_BOB_SCHEMA3; 

一體:

-- dropping schemas and generating output
DECLARE
   OUTPUT STRING DEFAULT '';
   CUR    CURSOR FOR SELECT CONCAT('DROP SCHEMA IF EXISTS ', SCHEMA_NAME) AS query
                     FROM INFORMATION_SCHEMA.SCHEMATA
                     WHERE SCHEMA_NAME ILIKE 'DEV_BOB_SCHEMA%';
BEGIN

   FOR rec IN CUR DO
       OUTPUT := OUTPUT || rec.query || CHAR(10);
       EXECUTE IMMEDIATE rec.query;
   END FOR;
   
   RETURN :OUTPUT;
END;

輸出(經典用戶界面):

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM