amazon-web-services - 从 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'
并
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
,但我想我一开始就不需要一个。
推荐阅读
- c++ - 阅读其他帖子后未定义对 vtable 问题的引用
- javascript - Gatsby GDPR Cookie Banner 如何实现多个 cookie + 禁用跟踪?
- android - Android Studios 应用登录失败,应用崩溃
- ios - 在核心数据中如何保存字典或数组,如字符串数据?
- data-warehouse - 作为事实表子集的维度有什么用?
- reactjs - 如何从承诺中返回数据,然后通过反应组件中的道具传递它
- css - 如何在悬停时暂停css动画
- python - 在 Python 中为 Old Macdonald 使用列表和循环
- javascript - 使用 discord.js 为我的 discord 机器人创建 Reaction Roll 函数的最佳方法是什么?
- go - 将时间戳转换为字符串