You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从S3加载含JSON字符串的CSV文件到Redshift失败问题求助

问题根因

  • 字段长度不足触发错位:你定义的action_values字段为varchar(256),但示例中的JSON字符串长度已经超过500字符,加载时内容被截断,截断后剩余的内容被识别为新的字段,导致整行的字段边界完全错位,原本对应前6列的位置都被后续的JSON片段填充。
  • 报错中Type: Long的来源:你表中第四列account_id为int8类型,Redshift中int8对应Long类型,字段错位后,该位置被以[开头的JSON片段填充,非数字内容无法转换为Long类型,因此抛出你看到的报错。

解决方案

全程无需转换为JSON文件输入,基于现有CSV调整即可:

  1. 调整表结构,扩大action_values字段长度
    执行DDL修改字段类型,确保能容纳完整的JSON串:
ALTER TABLE table_name 
ALTER COLUMN action_values TYPE varchar(max);

如果能预估JSON最大长度,也可以指定为varchar(2048)等合适的长度,varchar(max)最大支持65535字符,足够绝大多数场景使用。

  1. 调整COPY命令参数,优化CSV解析规则
    修改后的COPY命令增加ESCAPE参数处理转义字符,避免JSON内容中的特殊字符干扰字段分割:
copy table_name
from 's3://bucket_name/subdirectory/filename.csv'
delimiter ','
ignoreheader 1
csv quote as '"'
ESCAPE
dateformat 'auto'
timeformat 'auto'
access_key_id '...'
secret_access_key '...';
  1. (可选)预处理CSV内容(如果仍有解析问题)
    如果调整后还是报错,可以先预处理CSV文件:
  • 将JSON内容中的单引号替换为双引号,既符合标准JSON规范,也能避免和CSV解析规则冲突
  • 确保所有JSON字段都被双引号完整包裹,JSON内部如果出现双引号,用两个双引号转义(符合CSV标准要求)

快速验证方法

如果还想进一步定位问题,可以先创建一个临时表,所有字段都设为varchar(max)类型,尝试加载数据。如果加载成功,说明原问题就是字段长度不足或类型不匹配导致的错位,再逐一校验字段内容调整即可。


内容的提问来源于stack exchange,提问作者Dan Aizenberg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 00:27:03