[英]Drop schemas based on pattern match in Snowflake
從 Snowflake (ANSI SQL) 中的數據庫中刪除具有用戶指定前綴的所有模式的最佳方法是什么?
假設您有一個名為ANALYTICS
的數據庫,並且在該數據庫中有多個模式,例如: dev_bob_schema1
、 dev_bob_schema2
、 dev_alice_schema1
。
你怎么能只刪除那些預先添加dev_bob
的模式?
我已經到了可以列出模式的階段:
use database "ANALYTICS";
select schema_name
from information_schema.schemata
where schema_name ilike 'dev_bob%'
但我無法克服循環響應並執行drop schema ...
我會做以下事情:
USE DATABASE ...
show schemas like ...
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.