Redshift 支持通过执行此 SQL 查询将数据导出到 CSV。
unload ('select * from bhuvi')
to 's3://bhuvi-bucket/folder//user-data.csv'
iam_role 'arn:aws:iam::1111111:role/myredshiftrole'
delimiter '|' GZIP";
我有不同的表,需要将它们导出到不同的位置。所以我有一个如下所示的存储过程。所以我以后可以在变量中传递位置。
CREATE OR REPLACE PROCEDURE test_variable()
LANGUAGE plpgsql AS
$$
DECLARE
sql text;
s3_loc text;
role text;
deli text;
query text;
BEGIN
sql:='select * from bhuvi';
s3_loc:='s3://bhuvi-bucket/folder/';
role:='arn:aws:iam::1111111:role/myredshiftrole';
deli:='|';
query := "unload (sql) to 's3_loc/user-data.csv' iam_role 'role';
execute query;
END
$$;
但在某处语法是错误的。我找不到那个。当我调用此过程时,我收到以下错误。
test=# call test_variable();
ERROR: column "unload (sql) to 's3_loc/user-data.csv' iam_role 'role' " does not exist
CONTEXT: SQL statement "SELECT "unload (sql) to 's3_loc/user-data.csv' iam_role 'role' ""
PL/pgSQL function "test_variable" line 12 at assignment
test=#
您不能对字符串文字使用双引号。在字符串文字中包含单引号,必须通过将它们加倍来进行转义:
此外,不能在 SQL 字符串中使用来自 PL/pgSQL 的变量名称。您需要在构建的查询字符串中包含该变量的内容: