如何用COPY命令将含双引号字符串的CSV从S3导入Redshift?
解决Redshift COPY命令导入CSV时的「Invalid quote formatting for CSV」错误
你的问题根源在于源文件的引号格式不符合标准CSV规范(标准CSV要求字段内的双引号需用两个双引号转义,例如"Hello world ""people"""),导致Redshift解析时认为引号未正确闭合。以下是仅通过调整COPY命令参数解决的方案:
方案一:改用TEXT模式禁用引号解析
放弃CSV模式,使用TEXT模式并指定分隔符,同时设置一个不存在的字符作为QUOTE值,让Redshift将所有引号当作普通文本处理,不进行引号结构解析。
修改后的COPY命令:
COPY xxxx FROM 'S3_BCT' credentials 'xxxxxx' TEXT EMPTYASNULL TIMEFORMAT AS 'auto' DELIMITER ';' QUOTE '\0' TRUNCATECOLUMNS;
此方法会将"Hello world "people""完整作为字符串导入,若后续需要去除首尾引号,可通过UPDATE语句结合TRIM函数处理:
UPDATE xxxx SET your_column = TRIM(your_column, '"');
方案二:尝试ESCAPE参数适配非标准引号转义
如果必须保留CSV模式的特性,可尝试设置ESCAPE '"',让Redshift将双引号视为转义符,适配源文件中单个双引号转义内部引号的情况:
COPY xxxx FROM 'S3_BCT' credentials 'xxxxxx' CSV EMPTYASNULL TIMEFORMAT AS 'auto' DELIMITER ';' QUOTE '"' ESCAPE '"' TRUNCATECOLUMNS;
注:此方案仅当源文件的引号逻辑是用双引号转义双引号时生效,若源文件确实存在未闭合的引号问题,此方法可能无法解决。
为什么之前的尝试无效
- 使用
QUOTE '"'是错误的:QUOTE参数需要指定实际的字符,而非HTML实体,正确的写法应为QUOTE '"'。 REMOVEQUOTES参数无法生效:该参数仅在引号格式正确的前提下去除首尾引号,当Redshift先遇到引号格式错误时,会直接触发解析失败,参数无法执行。
内容的提问来源于stack exchange,提问作者cmos
相关产品推荐
相关产品推荐

