使用COPY命令导入S3管道分隔文件到Redshift时遇整数格式错误
Redshift COPY导入BCP导出文件时整数字段解析错误的解决思路
针对你遇到的Invalid digit, Value '.', Pos 0, Type: Integer错误,结合stl_load_errors显示的异常内容与实际文件行的差异,大概率是BCP导出的文件格式和Redshift COPY命令的解析规则不匹配导致的,以下是具体排查和解决步骤:
1. 检查BCP导出的分隔符配置
BCP默认的字段/行分隔符可能和你预期的不一致,即使肉眼看到是管道符,也可能存在转义或隐藏处理:
- 确保BCP导出时明确指定字段分隔符为
|,行分隔符为\r\n(Windows格式),示例命令:
其中bcp YourDB.dbo.YourTable out "export_file.txt" -S sqlserver_host -U username -P password -t "|" -c -r "\r\n" -C 65001-t "|"指定字段分隔符,-r "\r\n"指定行分隔符,-c用字符模式导出,-C 65001指定UTF-8编码。
2. 调整Redshift COPY命令的分隔符参数
Redshift默认行分隔符是Unix格式的\n,如果文件是Windows格式的\r\n,会导致解析错位,出现异常字段内容:
- 在COPY命令中明确指定行分隔符为
'\r\n',同时确认字段分隔符正确,示例:COPY your_redshift_table FROM 's3://your_bucket/path/export_file.txt' IAM_ROLE 'arn:aws:iam::123456789012:role/your_redshift_role' DELIMITER '|' LINE DELIMITER '\r\n' IGNOREHEADER 0;
3. 排查文件的隐藏字符与编码
即使Notepad++显示正常,也可能存在非打印字符或编码问题:
- 用vim打开文件,执行
:set list命令,查看所有隐藏字符(比如^M代表\r,其他控制字符也会显示),确认没有多余的非打印字符混入字段中。 - 检查文件编码,确保是UTF-8(Redshift推荐编码),避免UTF-16等双字节编码导致解析错误。
4. 核对表结构的字段顺序与类型
确认Redshift目标表的字段顺序、数据类型和SQL Server源表完全一致:
- 如果Redshift的整数字段位置,对应到导出文件的是字符串内容,就会触发数字解析错误;务必保证字段顺序一一对应,整数字段对应文件中的整数列。
内容的提问来源于stack exchange,提问作者Mr. Spock
相关产品推荐
相关产品推荐

