根据 Snowflake 中的模式匹配删除模式
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 ...
的最后障碍
我会做以下事情:
- 使用数据库……
- 显示模式,例如...
- SELECT 'DROP SCHEMA '||”name”||';'
从 table(result_scan(last_query_id()));
将输出粘贴回工作表并运行它。
使用 INFORMATION_SCHEMA.SCHEMATA
和 Snowflake 脚本:
设置:
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;
All-in-one:
-- 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;
输出(经典UI):
从 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 ...
我会做以下事情:
- 使用数据库……
- 显示模式,例如...
- SELECT 'DROP SCHEMA '||”name”||';' 从 table(result_scan(last_query_id()));
将输出粘贴回工作表并运行它。
使用 INFORMATION_SCHEMA.SCHEMATA
和 Snowflake 脚本:
设置:
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;
All-in-one:
-- 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;
输出(经典UI):