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

Redshift加载CSV时空字符串与NULL混淆问题及COPY命令疑问

问题

我有一个CSV文件,其中同时包含NULL值(表现为连续两个分隔符)和空字符串(用""表示)。希望将其原样加载到Redshift中,即空字符串保留为"",NULL值加载为NULL。但使用以下COPY命令加载后,Redshift表中没有NULL值,全部变为空字符串,请问这是为什么?

CSV示例

283858817256731,"",2023-01-01 04:25:47.686607,2023-01-01 04:25:47.686038,,,,
151e1e6d75455b17b43e2,"",2023-01-01 04:26:59.284768,2023-01-01 04:26:59.284354,,,,
3005867602921,"",2023-01-01 04:32:37.476288,2023-01-01 04:32:42.347546,,,"",
300450878333,"",2022-12-30 07:56:45.10391,2023-01-28 06:34:11.616317,,,"",
3005869211328,"",2023-01-01 04:35:35.413979,2023-01-01 04:35:50.054747,,,"",
2830888423936,,2023-01-01 04:36:50.889579,2023-01-01 04:36:50.889177,,"",,

原COPY命令

COPY jwan.users_birth_dates_s3_copy
FROM 's3://...<some path>'
iam_role  <some role>;
CSV
原因与解决办法

原因

Redshift的COPY命令在默认CSV模式下,会将连续分隔符之间的无引号空值和**带引号的空字符串""**统一解析为空字符串,因为默认没有指定区分两种空值类型的规则,导致你要的NULL值被当成了空字符串处理。

解决办法

需要在COPY命令中添加NULL AS ''参数,明确指定:未被引号包裹的空值(即连续分隔符)解析为Redshift的NULL,而带引号的""则保留为空字符串。

修改后的COPY命令:

COPY jwan.users_birth_dates_s3_copy
FROM 's3://...<some path>'
iam_role  <some role>
CSV
NULL AS '';

执行这条命令后,CSV中连续分隔符的位置会被加载为Redshift的NULL值,""则会保留为空字符串,符合你的需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 18:07:14