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.
还有其他方法吗?请帮忙!
这就是这两个 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)
| 归档时间: |
|
| 查看次数: |
738 次 |
| 最近记录: |