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

使用默认\N为空值时如何COPY整数列空值到Redshift

Redshift COPY加载整数列\N空值报错处理

问题表现

S3上存储的CSV文件中,整数列空值被导出为\N,文件字段结构为:

integer,string,string,integer

示例行内容:

4,"mystring","\N","\N"

使用如下COPY语句加载数据时,整数列抛出Invalid digit, Value 'N', Pos 0, Type: Short报错,但字符串列可以正常识别\N为空值,要求不修改默认的NULL AS配置解决问题:

COPY table FROM 's3location'
CREDENTIALS '----'
delimiter ',' removequotes ESCAPE COMPUPDATE ON ACCEPTINVCHARS

问题原因

Redshift COPY默认的空值识别规则存在类型差异:

  • 未被引号包裹的\N,会被所有数据类型的列识别为NULL,属于默认行为,无需额外配置
  • 被双引号包裹的"\N",仅字符串类型列会识别为空值,整数、数值、日期等非字符串列会直接把引号内的内容作为字面量解析,读到字符'N'时就会触发数字格式不匹配报错。
    当前语句同时配置ESCAPE和REMOVEQUOTES时,会进一步干扰反斜杠的转义逻辑,加剧非字符串列的解析失败问题。

解决方法

不需要修改默认NULL AS取值,任选一种方案即可:

  • 调整文件导出逻辑:整数、数值类非字符串列的空值\N不要加双引号包裹,直接输出无引号的\N即可被默认规则正常识别为空。这类列的正常值本身不会包含逗号、引号等需要转义的特殊字符,不需要加引号包裹,不会破坏CSV格式。
  • 调整COPY语句参数:去掉手动配置的delimiter ',' removequotes ESCAPE,改用FORMAT CSV参数,让Redshift按标准CSV规则解析字段,该模式下会统一处理所有类型列的带引号空值识别,调整后语句如下:
COPY table FROM 's3location'
CREDENTIALS '----'
FORMAT CSV
COMPUPDATE ON ACCEPTINVCHARS

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.15 16:16:01