如何在AWS Redshift卸载命令中处理带引号的值?

时间:2019-03-15 21:45:34

标签: sql amazon-web-services amazon-redshift

假设在AWS docs之后,我想使用

这样的卸载命令
unload
(
'SELECT * 
FROM table_name 
WHERE day = '2019-01-01' 
')
to 's3://bucket_name/path' 
iam_role 'arn:aws:iam::<aws acct num>:role/<redshift role>'
ADDQUOTES
ESCAPE
DELIMITER ','
GZIP
ALLOWOVERWRITE; 

问题是完整查询应加引号,并且在查询中写入字符串文字将在完整查询(作为有效sql)完成之前对字符串进行转义。如何在AWS redshift卸载语句中转义引号?

完全公开,我知道执行此操作的一种方法,但是还没有看到良好的链接或问题,因此我想为其他人的利益发布一个。

2 个答案:

答案 0 :(得分:1)

来自UNLOAD - Amazon Redshift

  

如果您的查询包含引号(例如,用引号引起来),则将文字放在两组单引号之间-您还必须将查询用单引号引起来:

     

('select * from venue where venuestate=''NV''')

答案 1 :(得分:0)

您可以将查询放在$$符号之间,这样您就不必担心任何引号了

unload
(
$$SELECT * 
FROM table_name 
WHERE day = '2019-01-01' 
$$)
to 's3://bucket_name/path' 
iam_role 'arn:aws:iam::<aws acct num>:role/<redshift role>'
ADDQUOTES
ESCAPE
DELIMITER ','
GZIP
ALLOWOVERWRITE;