【问题标题】:CSV parse using aws athena使用 aws athena 解析 CSV
【发布时间】:2017-06-19 01:44:27
【问题描述】:

我正在使用来自 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

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

【问题讨论】:

  • 你找到解决办法了吗

标签: java csv amazon-web-services


【解决方案1】:

这两个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';

【讨论】:

  • 我有如下数据和 OpenCSVSedre,不处理它。 100,样本& O 样本? PILE UP - 3 个样品,20,7^M$ 101,sample- 4/52$ sample$ CM,21,7^M$ 102,sample AT 3PM,22,4^M$
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-05
  • 2021-06-01
  • 1970-01-01
  • 2019-01-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多