AWS Athena 无法将 .csv 整数转换为表值

Posted

技术标签:

【中文标题】AWS Athena 无法将 .csv 整数转换为表值【英文标题】:AWS Athena unable to convert .csv integers to table values 【发布时间】:2017-11-10 22:15:19 【问题描述】:

我这里有一个简单的 csv 文件

Joe, 30, Male, 3
Winston, 40, Male, 7
Emily, 18, Female, 5
Wendy, 32, Female, 4

我上传到 AWS 上的 S3 存储桶。然后,使用 Athena,我创建了一个表

正确的 S3 存储桶路径 .csv 作为数据格式 列为name string, age int, gender string, consumed int

表创建成功,但是查询时,只有namegender。对于所有条目,ageconsumed 列都是空的。有什么想法吗?

【问题讨论】:

描述表显示什么? docs.aws.amazon.com/athena/latest/ug/ddl/describe-table.html name string age int gender string consumed int 请发布 DESCRIBE 的实际输出。同时发布您正在运行的查询。 i.imgur.com/XSIUad0.png 这是 DESCRIBE 的结果截图 我怀疑空格会导致解析 CSV 出现问题。逗号后的空格不是 CSV 标准的一部分。 【参考方案1】:

空格是无法在定义的数据类型中获得所需值的原因。只是为了测试的震动,试着把所有的东西都变成字符串并打印出来,你也会在打印的值中看到空格。

我的第一选择是从数据本身中删除空格。但是,如果从数据中删除空格并非易事,您可以将它们保持原样并使用这些列作为字符串创建表。然后您可以通过首先删除所有空格然后转换为 int 在内部将它们转换为 int。例如,

select cast(replace(age, '<whitespace>') as int) from <tablename>

替换将从您的字符串中删除所有空格。然后 cast 会将字符串转换为整数。 消费也可以这样做。

【讨论】:

以上是关于AWS Athena 无法将 .csv 整数转换为表值的主要内容,如果未能解决你的问题,请参考以下文章

在 Zeppelin 中保存 AWS Athena 查询的结果

如何将我的 Bigquery 查询转换为 AWS Athena 查询?

如何在 AWS Athena 中成功将字符串转换为日期类型?

Spark SQL 查询以获取在 AWS S3 中存储为 CSV 的 Athena 表的最后更新时间戳

AWS Athena数据集的注意事项? TSV

AWS Glue ETL Spark- 字符串到时间戳