如何在AWS Redshift中通过COPY命令区分加载空白值与NULL值?
解决AWS Redshift COPY命令区分空白值与NULL值的问题
要实现把CSV中无引号的空字段加载为NULL、带引号的空字符串""加载为空白,你需要去掉EMPTYASNULL参数,改用NULL AS ''参数。
原因说明
- Redshift默认在CSV模式下,无引号的空字段(比如
,,中间的内容)和带引号的""都会被解析为空字符串; - 用
EMPTYASNULL时,所有空字符串(不管是哪种来源)都会被统一转换为NULL,这就是你之前所有值都变成NULL的原因; NULL AS ''的作用是专门将无引号的空字段识别为NULL,同时保留带引号的""作为空白字符串存入表中,刚好匹配你的需求。
修改后的COPY命令
COPY my_table FROM 's3://my-bucket/path/null_vs_blank.csv' IAM_ROLE 'arn:aws:iam::<your-role>' CSV DELIMITER ',' IGNOREHEADER 1 NULL AS '';
预期加载结果
针对你的测试数据,加载后表中的数据会是:
- 第一行:
blank_column=NULL,null_column=NULL,extra='A' - 第二行:
blank_column=''(空白字符串),null_column=NULL,extra='B'
内容的提问来源于stack exchange,提问作者Aditya Bhat
相关产品推荐
相关产品推荐

