Stored procedures 如何使用存储过程在红移上创建10000个表?

Stored procedures 如何使用存储过程在红移上创建10000个表?,stored-procedures,amazon-redshift,stored-functions,Stored Procedures,Amazon Redshift,Stored Functions,我需要使用存储过程在红移数据库上创建10000个表。能否提供一个示例存储过程 下面是为Snowflake创建100000个表的存储过程 create or replace procedure tablecheck() returns string language javascript strict execute as owner as $$ var i = 1; while (i < 1001) { var sql_command = 'create table per

我需要使用存储过程在红移数据库上创建10000个表。能否提供一个示例存储过程

下面是为Snowflake创建100000个表的存储过程

create or replace procedure tablecheck()
returns string
language javascript
strict
execute as owner
as
$$
var i = 1;
while (i < 1001) {  
  var sql_command = 
   'create table performance.al55260.tab'+i+'(col1 int,col2 int,col3 int,col4 int,col5 int,col6 int,col7 int,col8 int,col9 int,col10 int,col11 int,col12 int,col13 int,col14 int,col15 int,col16 int,col17 int,col18 int,col19 int,col20 int,col21 int,col22 int,col23 int,col24 int,col25 int,col26 int,col27 int,col28 int,col29 int,col30 int,col31 int,col32 int,col33 int,col34 int,col35 int,col36 int,col37 int,col38 int,col39 int,col40 int,col41 int,col42 int,col43 int,col44 int,col45 int,col46 int,col47 int,col48 int,col49 int,col50 int);'
  try {
      snowflake.execute (
          {sqlText: sql_command}
          );
         // Return a success/error indicator.


      }
  catch (err)  {
      return "Failed: " + err;   // Return a success/error indicator.
      }
  i++;
}
return 'yes';
$$;
创建或替换过程tablecheck()
返回字符串
语言javascript
严格的
以所有者身份执行
作为
$$
var i=1;
而(i<1001){
var sql_命令=
'创建表性能.al55260.tab'+i+'(col1 int,col2 int,col3 int,col4 int,col5 int,col6 int,col7 int,col8 int,col9 int,col10 int,col11 int,col12 int,col13 int,col14 int,col15 int,col16 int,col17 int,col18 int,col19 int,col20 int,col21 int,col22 int,col23 int,col24 int,col25 int,col26 int,col27 int,col28,col29,col30,col31,col32,col33,col34,col35,coli)nt,col37 int,col38 int,col39 int,col40 int,col41 int,col42 int,col43 int,col44 int,col45 int,col46 int,col47 int,col48 int,col49 int,col50 int);'
试一试{
雪花(
{sqlText:sql_命令}
);
//返回成功/错误指示器。
}
捕捉(错误){
return“Failed:”+err;//返回成功/错误指示器。
}
i++;
}
返回“是”;
$$;
我正在寻找红移上的存储过程或函数来实现同样的效果


如果您对以任何其他编程方式创建数百万个表有任何想法,那就太好了。

请注意,当前每个红移集群的最大表数为9900(对于较小的实例类型)或20000(对于较大的实例类型)。这在

以下是我对红移存储过程的翻译:

CREATE OR REPLACE PROCEDURE tablecheck( 
      table_count IN  INTEGER
    , return_val  OUT VARCHAR
) 
LANGUAGE plpgsql
SECURITY DEFINER
AS $$
DECLARE
    schema_check BOOLEAN;
    loop_count   INTEGER;
    sql_command  VARCHAR(MAX);
BEGIN
    SELECT NVL(TRUE,FALSE) INTO schema_check 
    FROM pg_namespace 
    WHERE nspowner > 1 
    AND nspname = 'tablecheck';
    IF schema_check IS NULL THEN
        CREATE SCHEMA tablecheck;
    ELSE
        DROP SCHEMA tablecheck CASCADE;
        CREATE SCHEMA tablecheck;
    END IF;
    loop_count := 0;
    WHILE (loop_count < table_count) LOOP
      loop_count := loop_count + 1;
      sql_command := 'CREATE TABLE tablecheck.tbl_' || loop_count
            ||'(col1  int, col2  int, col3  int, col4  int, col5  int,'
            ||' col6  int, col7  int, col8  int, col9  int, col10 int,'
            ||' col11 int, col12 int, col13 int, col14 int, col15 int,'
            ||' col16 int, col17 int, col18 int, col19 int, col20 int,'
            ||' col21 int, col22 int, col23 int, col24 int, col25 int,'
            ||' col26 int, col27 int, col28 int, col29 int, col30 int,'
            ||' col31 int, col32 int, col33 int, col34 int, col35 int,'
            ||' col36 int, col37 int, col38 int, col39 int, col40 int,'
            ||' col41 int, col42 int, col43 int, col44 int, col45 int,'
            ||' col46 int, col47 int, col48 int, col49 int, col50 int);';
      EXECUTE sql_command;
      RAISE INFO 'Create table: %', loop_count;
    END LOOP;
    SELECT 'Complete' INTO return_val;
    DROP SCHEMA tablecheck CASCADE;
END
$$;

有关更多信息,请参见一个问题-为什么?您的用例是什么?我认为您需要重新设计,因此请与我们分享。在这两个问题中,您都谈到并标记了红移,但您的过程(以及对上一个问题的编辑中的注释)表明您正在雪花云平台上工作,而不是红移。您的实际架构是什么?对于Jon Scott的观点,以及上一版本中的问题,您想做什么?整个事情都有感觉。创建这么多表不太可能是数据的好架构。如果所有表共享相同的架构a、 最好使用一个带有列的表来标识差异属性(例如
al55260
),然后将该列设置为SORTKEY。其目的是测试内部应用程序的性能。我们只想检查应用程序是否处理大量数据。
BEGIN; CALL tablecheck(100); END;
-- …
-- INFO:  Create table: 99
-- INFO:  Create table: 100
--  return_val
-- ------------
--  Complete
--
-- Time: 720.729 ms