首页 > 解决方案 > 从 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 中的天数?

标签: amazon-web-servicesamazon-s3amazon-athena

解决方案


我用“`”替换ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'FIELDS TERMINATED BY ','包含列名。以下代码正确创建表:

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')
;

我不明白 a 的概念serde,但我想我一开始就不需要一个。


推荐阅读