无法从AWS Athena下载可用格式CSV数据的问题咨询
问题原因
你下载的文件被file识别为data、无法正常打开,基本是以下三个原因导致的:
- Athena控制台下载结果集时,只要结果大小超过10MB就会默认用GZIP压缩,但下载时不会自动追加
.gz后缀,你拿到的本质是压缩包,不是纯文本CSV,文本编辑器和Excel自然无法识别。 - 建表时SerDe配置错误,没有指定UTF-8编码和正确的CSV解析规则,控制台预览时前端做了格式兼容可以正常展示,但实际导出的文件格式不符合纯文本CSV规范。
- 结果集较大时,控制台的「下载结果」按钮走的是前端分片拉取逻辑,很容易出现下载截断、文件不完整的问题。
解决步骤
先排查压缩问题
在本地对下载的文件执行校验命令:gzip -t my_table_name.csv
如果命令没有返回报错,说明文件就是GZIP压缩包,直接执行解压命令即可得到正常的UTF-8 CSV:gzip -d my_table_name.csv
解压后的文件可以直接用Excel、文本编辑器打开。如果校验提示不是gzip文件,修正表配置
你之前建表时大概率漏了CSV对应的SerDe和编码配置,先删除旧表,用如下模板重新建表,注意替换成你自己的字段、S3路径:
CREATE EXTERNAL TABLE IF NOT EXISTS my_table_name ( -- 按你的CSV表头逐行定义字段,比如user_id string, order_amount bigint这种 ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ( 'separatorChar' = ',', 'quoteChar' = '"', 'escapeChar' = '\\' ) STORED AS TEXTFILE LOCATION 's3://你的源CSV存放的S3路径/' TBLPROPERTIES ( 'skip.header.line.count'='1', -- 自动跳过每个源文件的表头,避免合并后出现重复表头 'serialization.encoding'='UTF-8' );
建表完成后先执行select * from my_table_name limit 10验证结果,确认和源CSV内容一致。
- 全量合并导出不要走控制台下载按钮
7万份CSV合并后数据量不小,控制台下载很容易出问题,直接用CTAS语句把全量合并结果输出到指定S3路径:
CREATE TABLE merged_full_csv ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ( 'separatorChar' = ',', 'quoteChar' = '"', 'escapeChar' = '\\' ) STORED AS TEXTFILE LOCATION 's3://你自己指定的结果输出S3路径/final_merged_csv/' TBLPROPERTIES ('serialization.encoding'='UTF-8') AS SELECT * FROM my_table_name;
等查询执行完成后,直接到上面配置的结果S3路径下下载生成的文件即可,这些文件是标准UTF-8编码的纯文本CSV,不存在格式问题。如果结果过大Athena切分成了多个文件,本地合并时跳过除第一个文件外的其余文件的表头行就行。
内容的提问来源于stack exchange,提问作者Benjamin
相关产品推荐
相关产品推荐

