當我在 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 結果為空?