O Redshift suporta dados de exportação para CSV executando esta consulta SQL.
unload ('select * from bhuvi')
to 's3://bhuvi-bucket/folder//user-data.csv'
iam_role 'arn:aws:iam::1111111:role/myredshiftrole'
delimiter '|' GZIP";
Eu tenho tabelas diferentes e preciso exportá-las para locais diferentes. Então eu tenho um procedimento armazenado como abaixo. para que eu possa passar os locais em uma variável no futuro.
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
$$;
mas em algum lugar a sintaxe está errada. Eu não consigo encontrar isso. Quando eu chamo este procedimento, estou recebendo este erro abaixo.
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=#
Você não pode usar aspas duplas para literais de string. Inclua uma aspa simples em um literal de string, ele deve ser escapado dobrando-os:
Além disso, não pode usar nomes de variáveis de PL/pgSQL em uma string SQL. Você precisa incluir o conteúdo dessa variável na string de consulta que você cria: