如何使用Copy命令将含反斜杠的S3 CSV.gz文件加载至Redshift
解决Redshift COPY命令处理CSV中反斜杠转义的问题
你的问题核心是CSV文件里用反斜杠(\)转义双引号,需要让Redshift的COPY命令正确识别这种转义规则,避免解析错误。下面是具体的解决方案:
关键参数说明
Redshift默认的CSV解析规则是用双引号("")转义字段内的双引号,但你的文件用的是反斜杠(\"),所以需要明确指定转义字符,同时启用CSV格式解析:
- CSV:告诉Redshift源文件是标准CSV格式,识别逗号分隔符和双引号包裹的字段
- ESCAPE:指定反斜杠作为转义字符,这样Redshift会把
\"解析为单个双引号,不会把反斜杠当成普通字符保留,也不会因为未正确转义的双引号导致字段拆分错误 - GZIP:因为你的文件是
.csv.gz压缩格式,需要让Redshift自动解压加载 - TRIMBLANKS:去除字段前后的空白字符(你原命令里已经用到,这里保留)
调整后的完整COPY命令
copy stg.train_ticket from 's3://{path}/' CREDENTIALS 'aws_access_key_id={aws_access_key_id};aws_secret_access_key={aws_secret_access_key}' CSV ESCAPE GZIP TRIMBLANKS;
验证与注意事项
- 测试时可以在命令末尾加
LIMIT 100参数,只加载前100行数据,快速检查字段值是否正确(比如示例中第二行的ARIZONA \"9\" LLC会被解析为ARIZONA "9" LLC) - 如果字段本身需要包含反斜杠,要写成
\\,这样Redshift会解析为单个反斜杠字符 - 只要字段是用双引号完整包裹的,即使内部包含换行符,CSV参数也能正确识别,不会把换行符误判为行分隔符
内容的提问来源于stack exchange,提问作者Tom Tang
相关产品推荐
相关产品推荐

