我正试图从存储在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。