如何在 AWS Athena 中成功将字符串转换为日期类型?

Posted

技术标签:

【中文标题】如何在 AWS Athena 中成功将字符串转换为日期类型?【英文标题】:How to successfully convert string to date type in AWS Athena? 【发布时间】:2020-10-21 07:13:14 【问题描述】:

我正在尝试将字符串类型的日期列转换为日期类型。

我在 AWS Athena 中使用以下查询:

SELECT a, b, date_parse(date_start, '%m-%d-%Y') AS date_start
FROM "database"."table"

如果我添加一个限制 10 ,它可以工作。但是当我尝试对所有记录执行此操作时,我收到此错误: INVALID_FUNCTION_ARGUMENT: Invalid format: "5/16/2020" is malformed at "/16/2020"

字符串类型列中的所有日期看起来像这样 - 2/22/2020,并且它正确地转换了它。我不明白为什么它不会对其余部分做同样的事情。

另一个问题 - 我正在使用上面的 SELECT 语句测试转换 - 如果我弄清楚下一步会是什么?我可以在 AWS Athena 中创建 UPDATE TABLE 吗?

【问题讨论】:

【参考方案1】:

您的日期字符串看起来像'2-22-2020''2/22/2020'

如果您有分隔符'/',如您的错误消息中所示,那么您需要调整格式说明符:

SELECT a, b, date_parse(date_start, '%m/%d/%Y') AS date_start
FROM "pg_orangeboydata"."kanopy"

您也可以同时管理这两种格式:

SELECT a, b, date_parse(replace(date_start, '/', '-'), '%m-%d-%Y') AS date_start
FROM "pg_orangeboydata"."kanopy"

【讨论】:

谢谢!这对那个问题非常有效!如果我不考虑,您是否知道如何处理某些日期为 '%m-%d-%Y' 和其他日期为 %m-%d-%Y %H:%i'' 的列我得到 - INVALID_FUNCTION_ARGUMENT: Invalid format: "11-16-2019 20:16" is malformed at " 20:16",如果我这样做了,我得到 INVALID_FUNCTION_ARGUMENT: Invalid format: "9-7-2019" is too short

以上是关于如何在 AWS Athena 中成功将字符串转换为日期类型?的主要内容,如果未能解决你的问题,请参考以下文章

在 Zeppelin 中保存 AWS Athena 查询的结果

如何使用 AWS Glue 将许多 CSV 文件转换为 Parquet

AWS Glue ETL Spark- 字符串到时间戳

AWS Athena数据集的注意事项? TSV

AWS Athena 无法将 .csv 整数转换为表值

如何在 AWS Athena 中转换时区