当我在 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 结果为空?