使用aws athena进行CSV解析

时间:2017-06-19 01:44:27

标签: java csv amazon-web-services

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

如果使用

创建了athena表

if(x == NULL) { cout << "Value not in tree." << endl; return x; } if(x->key == key) { return x; } ...

然后它无法正确解析列

但是,如果我使用

,它会正确解析

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

但是ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'的问题是它要求所有列都是字符串数据类型,我需要在查询中执行日期操作,所以不能使用OpenCSVSerde

还有其他解决方案吗? 请帮忙!

1 个答案:

答案 0 :(得分:3)

这两个SerDes是如何设计的,在数据​​相对干净的情况下,你应该只使用LazySimpleSerDe,例如,它没有用引号括起来的值或没有分隔符在价值中。并且OpenCSVSerde适用于反序列化用引号括起来的值的CSV文件;但是,表中的所有列都是STRING数据类型。更多信息here

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

如果您在日期类型列中有以下字符串数据,请说明:

11/13/2017
11/14/2017
11/15/2017
11/16/2017

您可以使用以下查询选择范围

中的日期
select * from somedb.sometable where date_parse(createdate, '%m/%d/%Y') between DATE'2017-11-14' and DATE'2017-11-16';