Redshift UNLOAD 到 S3 使用 PL/SQL 循环变量
Redshift UNLOAD to S3 using PL/SQL loop variable
是否可以在存储过程循环中使用 Redshift UNLOAD 命令来:
- 卸载依赖于变量的查询
- 定义依赖于变量的 S3 路径
我一直在试验一个人为的例子,但似乎无法让它工作..
CREATE OR REPLACE PROCEDURE p_shoes()
LANGUAGE plpgsql
AS $$
DECLARE
shoe_record RECORD;
BEGIN
FOR shoe_record IN EXECUTE 'SELECT * FROM shoes' LOOP
UNLOAD('SELECT * FROM shoes JOIN shoetypes ON shoetypes.shoetype = ''' || shoe_record.shoetype || '''')
TO 's3://some-bucket/prefix/' || shoe_record.shoetype;
END LOOP;
RETURN;
END;
$$;
您可以使用EXECUTE
命令将运行任何字符串作为命令。
所以,你可以把UNLOAD
命令变成一个字符串(varchar),修改感兴趣的值然后EXECUTE
命令。
是否可以在存储过程循环中使用 Redshift UNLOAD 命令来:
- 卸载依赖于变量的查询
- 定义依赖于变量的 S3 路径
我一直在试验一个人为的例子,但似乎无法让它工作..
CREATE OR REPLACE PROCEDURE p_shoes()
LANGUAGE plpgsql
AS $$
DECLARE
shoe_record RECORD;
BEGIN
FOR shoe_record IN EXECUTE 'SELECT * FROM shoes' LOOP
UNLOAD('SELECT * FROM shoes JOIN shoetypes ON shoetypes.shoetype = ''' || shoe_record.shoetype || '''')
TO 's3://some-bucket/prefix/' || shoe_record.shoetype;
END LOOP;
RETURN;
END;
$$;
您可以使用EXECUTE
命令将运行任何字符串作为命令。
所以,你可以把UNLOAD
命令变成一个字符串(varchar),修改感兴趣的值然后EXECUTE
命令。