繁体   English   中英

Snowflake(存储过程):使用存储过程以编程方式将一张表拆分为多张表

[英]Snowflake (stored procedure): split one table into several tables programmatically using stored procedures

我在雪花数据库中有一张大表,我想根据一列将其拆分为较小的表。

大表展示了三类动物(狮子、老虎、斑马)。 我想以编程方式(非硬编码)将其拆分为单独的狮子、老虎和斑马表。

我怎样才能做到这一点? 理想情况下,我想用雪花中的存储过程来做到这一点。

这是期望结果的示例。 实际上,我有 1000 多种动物,这就是为什么需要根据“动物”列中的值自动化表创建过程的原因。

原表

动物 姓名
狮子 乔治
老虎 约翰
狮子 帕特里克
老虎 山姆
狮子 保罗
斑马 莎拉

新桌:狮子桌

姓名
乔治
帕特里克
保罗

新桌:老虎桌

姓名
约翰
山姆

新桌:斑马桌

姓名
莎拉

这是源表:

CREATE TABLE mytable(
   Animal VARCHAR(5) NOT NULL PRIMARY KEY
  ,Name   VARCHAR(7) NOT NULL
);
INSERT INTO mytable(Animal,Name) VALUES ('Lion','Georg');
INSERT INTO mytable(Animal,Name) VALUES ('Tiger','John');
INSERT INTO mytable(Animal,Name) VALUES ('Lion','Patrick');
INSERT INTO mytable(Animal,Name) VALUES ('Tiger','Sam');
INSERT INTO mytable(Animal,Name) VALUES ('Lion','Paul');
INSERT INTO mytable(Animal,Name) VALUES ('Zebra','Sarah');

您可以使用 Snowflake 脚本生成这些表:

CREATE PROCEDURE generate_tables()
RETURNS VARCHAR
LANGUAGE SQL
AS
DECLARE
   srctable VARCHAR := 'mytable';
   c1 CURSOR FOR SELECT DISTINCT Animal FROM mytable;
BEGIN
   FOR c IN c1 DO
      EXECUTE IMMEDIATE 'CREATE TABLE ' || c.Animal || ' AS SELECT Name FROM ' || srctable || ' WHERE Animal = ''' || c.Animal || '''';
   END FOR;
   RETURN 'OK';
END;

call generate_tables();

它生成表格:

Select * from lion;

Select * from Tiger;

Select * from Zebra;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM