使用aws athena进行CSV解析

gir*_*ish 6 java csv amazon-web-services

我正在使用来自java代码的AWS athena解析csv文件.csv中的某些列具有日期类型,并且一列中的值包含逗号.

如果创建了athena表

ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'

然后它无法正确解析用逗号列

但是,如果我使用它,它会正确解析

ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'

但问题OpenCSVSerde是它需要所有列都是字符串数据类型,我需要在查询中执行日期操作,所以不能使用OpenCSVSerde.

还有其他方法吗?请帮忙!

Bab*_*abl 4

这就是这两个 SerDe 的设计方式,您应该只LazySimpleSerDe在数据相对干净的情况下使用,例如,它没有用引号引起来的值或值中没有分隔符。并且OpenCSVSerde非常适合反序列化值用引号引起来的 CSV 文件;但是,表中的所有列都是 STRING 数据类型。更多信息请点击此处

因此,在您的情况下,由于您的数据不干净,解析它并加载到 Athena 的唯一方法是使用OpenCSVSerde. 如果您需要使用日期操作,则需要手动将日期字符串转换/解析为日期对象,这使用date_parse函数相当容易完成。

假设您的日期类型列中有以下字符串数据:

11/13/2017
11/14/2017
11/15/2017
11/16/2017
Run Code Online (Sandbox Code Playgroud)

您可以使用以下查询来选择范围内的日期

select * from somedb.sometable where date_parse(createdate, '%m/%d/%Y') between DATE'2017-11-14' and DATE'2017-11-16';
Run Code Online (Sandbox Code Playgroud)