如何在Redshift COPY命令中指定行分隔符
在Redshift COPY命令中指定自定义行分隔符
Redshift的COPY命令提供了ROWDELIMITER参数,专门用来指定记录的行分隔符,用法和你已经在用的DELIMITER完全类似,刚好能解决你遇到的CRLF误识别问题。
- 如果你期望的正确行分隔符是LF(
\n),可以直接把ROWDELIMITER设为'\n',这样系统只会把LF当作新行的标志,混入的CR(\r)会被视为普通字符处理,不会触发误拆分:
COPY your_target_table FROM 's3://your-data-bucket/data-file.csv' IAM_ROLE 'arn:aws:iam::123456789012:role/your-redshift-access-role' DELIMITER ',' ROWDELIMITER '\n';
- 如果你的数据使用的是其他自定义行分隔符(比如
'|||'这类特殊组合),直接替换参数值即可:
COPY your_target_table FROM 's3://your-data-bucket/data-file.csv' IAM_ROLE 'arn:aws:iam::123456789012:role/your-redshift-access-role' DELIMITER ',' ROWDELIMITER '|||';
另外补充两个实用参数帮你进一步处理脏数据:
REMOVEQUOTES:如果你的字段是用引号包裹的,开启这个参数后,Redshift会忽略引号内部的所有换行符(包括CRLF),避免字段内的换行被误判为新记录:
COPY your_target_table FROM 's3://your-data-bucket/data-file.csv' IAM_ROLE 'arn:aws:iam::123456789012:role/your-redshift-access-role' DELIMITER ',' ROWDELIMITER '\n' REMOVEQUOTES;
ESCAPE:如果数据里的换行符是经过转义的(比如用\\n表示实际的换行),可以指定转义字符,让系统正确解析:
COPY your_target_table FROM 's3://your-data-bucket/data-file.csv' IAM_ROLE 'arn:aws:iam::123456789012:role/your-redshift-access-role' DELIMITER ',' ROWDELIMITER '\n' ESCAPE '\\';
内容的提问来源于stack exchange,提问作者Mr. Spock
相关产品推荐
相关产品推荐

