Redshift COPY命令导入CSV时BIGINT列报错的解决方案咨询
解决Redshift COPY导入CSV时的BIGINT类型转换错误
错误原因
你遇到的ERROR:Invalid digit, Value 'a', Pos 0, Type: Long错误,是因为S3存储的CSV文件中,col1列存在无法转换为BIGINT类型的非数字值(比如字符'a'),Redshift默认会严格校验数据类型转换,转换失败就抛出错误。
解决方案
1. 显式指定列类型并处理无效值
在COPY命令的列列表中直接标注col1的类型为BIGINT,同时结合参数处理无效值:
COPY "database"."schema"."table" ( col1 BIGINT, col2, col3, col4, col5, col6 ) FROM 's3-path' IAM_ROLE 'arn-role-with-command-access-role-policy' CSV NULL AS 'a' -- 将值为'a'的记录转为NULL,可根据实际无效值调整 BLANKSASNULL; -- 把空字符串转为NULL,适配空值场景
2. 允许少量错误行排查问题
如果不确定所有无效值的格式,可以先设置MAXERROR允许一定数量的错误行,先导入有效数据并查看错误详情:
COPY "database"."schema"."table" ( col1 BIGINT, col2, col3, col4, col5, col6 ) FROM 's3-path' IAM_ROLE 'arn-role-with-command-access-role-policy' CSV MAXERROR 20; -- 允许最多20条错误行,可根据数据量调整
3. 替换无效字符(可选)
如果存在其他非数字的无效字符,可添加ACCEPTINVCHARS参数,将无效字符替换为?后继续导入:
COPY "database"."schema"."table" ( col1 BIGINT, col2, col3, col4, col5, col6 ) FROM 's3-path' IAM_ROLE 'arn-role-with-command-access-role-policy' CSV ACCEPTINVCHARS BLANKSASNULL;
额外建议
先检查S3中的CSV文件,确认col1列的无效值具体是什么(比如表头字符串、特殊符号等),再针对性选择参数处理,能更高效解决问题。
内容的提问来源于stack exchange,提问作者Manuel Herrera
相关产品推荐
相关产品推荐

