首页 > 解决方案 > “ 取而代之 ””

问题描述

redshift 卸载命令正在将“替换为”。示例:

UNLOAD($$ select '"Jane"' as name $$)
TO 's3://s3-bucket/test_' 
iam_role arn:aws:iam::xxxxxx:role/xxxxxx' 
HEADER 
CSV 
DELIMITER ',' 
ALLOWOVERWRITE 

输出看起来像: ""Jane""

如果我使用 运行相同的命令select 'Jane' as name,则输出显示完全没有引号Jane。但我需要输出"Jane"

标签: sqlpostgresqlamazon-redshift

解决方案


您要求卸载的文件采用 CSV 格式,而 CSV 格式表示,如果您想要在数据中使用双引号,则需要使用另一个双引号对其进行转义。见https://datatracker.ietf.org/doc/html/rfc4180

所以 Redshift 完全按照你的要求做。现在,如果您只想要一个逗号分隔的文件,那么您不想使用“CSV”,因为这将添加所有必要的字符以使文件完全符合 CSV 规范。

这种选择将归结为正在读取文件的工具是什么,以及他们是否期望一个符合 rfc 的 CSV 或只是一个字段用逗号分隔的简单文件。

这是我的一个抱怨 - 工具说他们读取 CSV 但不遵循规范。如果您说 CSV,请遵循格式。或者将您阅读的内容称为不同的内容,例如 CDV - 逗号分隔值。


推荐阅读