2017-06-19 83 views
5

我從java代碼使用AWS athena解析csv文件。 csv中的某些列是日期類型,一列中的值是逗號。使用aws athena的CSV解析

如果雅典娜表與

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

創建那麼它是無法與解析列逗號正確

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

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

OpenCSVSerde的問題是它需要所有列是字符串數據類型,我需要在查詢中執行日期操作,所以不能使用OpenCSVSerde

任何其他解決方案? 請幫忙!

+0

你找到了解決辦法 –

回答

2

這就是這兩個SerDes的設計原理,在數據相對乾淨的情況下,只應使用LazySimpleSerDe,例如,它沒有用引號括起來的值或者沒有分隔符。而OpenCSVSerde適用於反序列化帶引號括起的值的CSV文件;但是,表格中的所有列都是STRING數據類型。更多信息here

因此,在你的情況下,由於你的數據不乾淨,解析它並加載到雅典娜的唯一方法是使用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';