Athena CTAS生成CSV时null值变为\N,如何调整为空列输出?
Athena CTAS生成CSV时空值输出为空列的解决方案
你的写法本身没有语法错误,出现\N替换空值是Athena底层序列化TEXTFILE格式的默认行为:默认会将NULL值序列化为\N标识,不属于SQL写法问题。
方案1:修改CTAS配置直接指定空值格式(推荐)
你可以直接将输出格式指定为CSV,同时新增null_format参数自定义空值输出为空字符串,不需要修改SELECT逻辑,修改后的SQL如下:
CREATE TABLE table_name WITH ( format = 'CSV', field_delimiter=',', null_format = '', external_location='s3://bucket_name/location' ) AS SELECT * FROM "db_name"."src_table_name";
注意:null_format参数需要Athena引擎版本2及以上支持,如果你的环境仍在使用旧版本引擎,可以用方案2。
方案2:查询时显式替换NULL值
在SELECT阶段用COALESCE函数将所有可能为NULL的字段替换为空字符串,非字符串类型的字段需要先转为字符串类型,示例如下:
CREATE TABLE table_name WITH ( format = 'TEXTFILE', field_delimiter=',', external_location='s3://bucket_name/location' ) AS SELECT COALESCE(CAST(int_col AS VARCHAR), '') AS int_col, COALESCE(str_col, '') AS str_col, COALESCE(date_col, '') AS date_col -- 其余字段按同样规则处理 FROM "db_name"."src_table_name";
内容的提问来源于stack exchange,提问作者hossam
相关产品推荐
相关产品推荐

