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

1 分钟阅读
0

当我在 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 的日期和时间函数将查询中的列读取为 DATE 或 TIMESTAMP。

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

相关信息

为什么在 Amazon Athena 中查询表时 TIMESTAMP 结果为空?

AWS 官方
AWS 官方已更新 3 年前