generate unload command for multiple tables

0

select 'UNLOAD ('select * from '||schemaname||'.'||tablename||'') TO 's3://bucket/schema/'||schemaname||'.'||tablename||'' iam_role 'arn:aws:iam::619481062323:role/sam-redshift-role-for-s3' region 'us-east-1' allowoverwrite parallel off ; ' from pg_tables where schemaname = 'schemaname'

ERROR: syntax error at or near "select" LINE 1: select 'UNLOAD ('select * from '||schemaname||'.'||tablename... ^

is the any way to generate unload script for all tables in schema like as statement

thanks

  • Hi,

    The tricky part here is dealing with all the single quotes - some you need in the output text while others delimit different parts of the query.

    I think the below does the trick - see what you think:

    select 'UNLOAD ('||''''||'select * from '||schemaname||'.'||tablename||''''||') TO '||''''||'s3://bucket/schema/'||schemaname||'.'||tablename||''''||' iam_role '||''''||'arn:aws:iam::dontpostthis:role/sam-redshift-role-for-s3'||''''||' region '||''''||'us-east-1'||''''||' allowoverwrite parallel off ; ' from pg_tables

    The key part is the use of ||''''|| to output a single quote character in the output.

    You probably don't want to post the full ARN by the way here - I've removed it in my query above - so you'll need to swap that back.

    Cheers

질문됨 2년 전424회 조회
1개 답변
0

Hi, Yes, the key part is to get single quote while we are generating the dynamic sqls. You can follow the solution provided by Flag or use '' twice single quote to get single quote in dynamic query.

Rewritten query and sample output:

rsdb=# select 'UNLOAD (''select * from '||schemaname||'.'||tablename||''') TO ''s3://bucket/schema/'||schemaname||'.'||tablename||''' iam_role ''arn:aws:iam::account_id:role/yourbucketrole'' region ''us-east-1'' allowoverwrite parallel off ; '
from pg_tables where schemaname='temp1';
                                                                                  ?column?
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 UNLOAD ('select * from temp1.t2') TO 's3://bucket/schema/temp1.t2' iam_role 'arn:aws:iam::account_id:role/yourbucketrole' region 'us-east-1' allowoverwrite parallel off ;
(1 row)
AWS
지원 엔지니어
Jay
답변함 2년 전

로그인하지 않았습니다. 로그인해야 답변을 게시할 수 있습니다.

좋은 답변은 질문에 명확하게 답하고 건설적인 피드백을 제공하며 질문자의 전문적인 성장을 장려합니다.

질문 답변하기에 대한 가이드라인

관련 콘텐츠