當我在 Amazon Athena 表中查詢 TIMESTAMP 資料欄時,出現例外狀況。
簡短描述
當您查詢包含 TIMESTAMP 資料的 Athena 表時,查詢可能會失敗,並出現下列其中一種例外狀況:
- "TYPE_MISMATCH: line 1:49: Cannot apply operator: timestamp(3) < varchar(19)": 如果您在查詢中的 TIMESTAMP 和 STRING 值之間使用邏輯運算子 (例如「<」),就可能會出現此例外狀況。
- "cast(col as timestamp) with INVALID_CAST_ARGUMENT": 如果您對 Athena 不支援的資料類型欄位使用 CAST,那麼您可能會收到此例外狀況。
解決方法
邏輯運算子的語法錯誤
如果您的查詢使用邏輯運算子來比較時間戳記值,那麼您可能會收到例外狀況錯誤。
資料表中的 TIMESTAMP 資料格式可能錯誤。Athena 需要使用 Java TIMESTAMP 格式。在查詢篩選條件中使用 Trino日期時間函式將 STRING 轉換為 TIMESTAMP,或使用CAST 將 STRING 轉換為TIMESTAMP。如需詳細資訊,請參閱 Trino 網站上的日期和時間函式及運算子。
請完成下列步驟:
- 建立一個包含以 STRING 格式儲存的時間戳記資料的資料表,範例如下:
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)
**注意:**將 testdataset1、testid1、testname1 和 testtimestamp1 替換為您的值。
- 對 STRING 值使用 CAST 函式來套用時間戳記篩選條件:
SELECT * FROM testdataset1 WHERE testtimestamp1 < CAST('2020-07-14 00:00:00' AS timestamp)
**注意:**將 testdataset1 和 testtimestamp1 替換為您的值。
使用 CAST 時出現無效參數錯誤
如果您使用 CAST 將資料欄轉換為 TIMESTAMP 資料類型,那麼您可能會收到例外狀況錯誤。
您想轉換為 TIMESTAMP 的資料欄,其資料類型可能是 Athena 不支援的類型。使用 Trino 日期和時間函式,將查詢中的資料欄讀取為 DATE 或 TIMESTAMP。如需詳細資訊,請參閱 Trino 網站上的日期和時間函式及運算子。
請完成下列步驟:
- 建立一個類似以下範例的資料表:
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)
**注意:**將 testdataset2、testid2、testname2 和 testtimestamp2 替換為您的值。
- 使用 Trino date_parse 函式將資料表轉換為 Java TIMESTAMP 格式:
SELECT testid2, testname2, date_parse(testtimestamp2, '%m/%d/%Y %h:%i:%s %p') AS testtimestamp2 FROM testdataset2
**注意:**將 testdataset2、testid2、testname2 和 testtimestamp2 替換為您的值。
相關資訊
為什麼在 Amazon Athena 中查詢資料表時,TIMESTAMP 結果為空?