使用 AWS re:Post 即表示您同意 AWS re:Post 使用條款

如何解決在 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 官方已更新 4 年前