从AWS Athena中的csv文件创建外部表



我正试图从存储在S3中的csv文件在AWS Athena中创建一个外部表。

csv文件如下所示。如您所见,数据是用引号("(括起来的而不是,并用逗号(,(分隔。

ID,PERSON_ID,DATECOL,GMAT
612766604,54723367,2020-01-15,637
615921503,158634997,2020-01-25,607
610656030,90359154,2020-01-07,670

我尝试了以下代码来创建一个表:

CREATE EXTERNAL TABLE my_table
(
ID string,
PERSON_ID int,
DATE_COL date,
GMAT int
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
STORED AS TEXTFILE
LOCATION 's3://my_bucket/som_bucket/dat/'
TBLPROPERTIES
(
'skip.header.line.count'='1'
)
;

我尝试用以下代码预览表格:

select
*
from
my_table
limit 10

这引发了这个错误:

HIVE_BAD_DATA:分析字段2的字段值"2020-01-15"时出错:对于输入字符串:";2020-01-15";

我的问题是:我是否通过了正确的serde?如果是,我如何格式化日期列(DATE_COL(,使其以YYYY-MM-DD读取和显示日期?

我将ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'替换为CCD_ 5并用"`&";。以下代码正确创建表格:

CREATE EXTERNAL TABLE my_table
(
`ID` string,
`PERSON_ID` int,
`DATE_COL` date,
`GMAT` int
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
LOCATION 's3://my_bucket/som_bucket/dat/'
TBLPROPERTIES ('skip.header.line.count'='1')
;

我不理解serde的概念,但我想我一开始并不需要它。

根据文档,类型为DATE的列必须具有表示自1970年1月1日以来的天数的值。例如,页眉后第1行的日期值应为18276。当查询该表时,日期将显示为2020-01-15。