当我在 Amazon Athena 中查询表时,如何解决时间戳异常问题?

上次更新日期:2021 年 4 月 9 日

当我在 Amazon Athena 表中查询 TIMESTAMP 数据列时,出现异常。

简短描述

当您查询包含 TIMESTAMP 数据的 Athena 表时,查询可能会失败,并出现以下任一异常:

  • SYNTAX_ERROR:行“>”无法应用于时间戳,varchar(19):如果在查询中的 TIMESTAMP 和 STRING 值之间使用了逻辑运算符(例如“>”),则可能会遇到此异常。
  • cast(col as timestamp) with INVALID_CAST_ARGUMENT:如果在具有不受 Athena 支持的数据类型的列上使用强制转换,则可能会遇到此异常。

解决方法

异常:SYNTAX_ERROR:行“>”无法应用于时间戳,varchar(19)

表中的 TIMESTAMP 数据的格式可能错误。Athena 需要 Java TIMESTAMP 格式。使用 Presto 的日期和时间函数或强制转换在查询筛选条件中将 STRING 转换为 TIMESTAMP。有关详细信息,请参阅 Presto 文档中的日期和时间函数以及运算符

1.    通过运行类似于以下内容的查询来创建表 testdataset1

CREATE TABLE testdataset1 AS SELECT testid1, testname1, date_parse(testtimestamp1,'%m/%d/%Y %h:%i:%s %p') AS testtimestamp1 
FROM (
    VALUES
        (1, 'a','7/14/2020 8:22:39 AM'),
        (2, 'b','8/01/2015 10:22:39 PM'),
        (3, 'c','8/13/2017 4:22:39 AM')
) AS t(testid1, testname1, testtimestamp1)

2.    使用 cast 函数对文本值应用时间戳筛选条件(示例:2020-07-14 00:00:00):

SELECT * FROM testdataset WHERE testtimestamp1 < cast('2020-07-14 00:00:00' as timestamp)

异常:cast(col as timestamp) with INVALID_CAST_ARGUMENT

使用 Presto 的日期和时间函数将查询中的列读取为日期或时间戳。

1.    通过运行类似于以下内容的查询来创建表 testdataset2

CREATE TABLE testdataset2 AS SELECT * FROM 
(VALUES
        (1, 'a','7/14/2020 8:22:39 AM'),
        (2, 'b','8/01/2015 10:22:39 PM'),
        (3, 'c','8/13/2017 4:22:39 AM')
) AS t(testid2, testname2, testtimestamp2)

2.    使用 Presto 的 date_parse 函数将 STRING TIMESTAMP 列 testtimestamp2 转换为 JAVA TIMESTAMP 格式:

SELECT testid2,testname2,date_parse(testtimestamp2,'%m/%d/%Y %h:%i:%s %p') AS testtimestamp2 FROM testdataset2

这篇文章对您有帮助吗?


您是否需要账单或技术支持?