本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用時間戳記資料
本節說明在 Athena 中使用時間戳記資料的一些考量。
注意
Athena 引擎版本 2 與 Athena 引擎版本 3 之間的時間戳記處理方式發生變更。如需有關 Athena 引擎版本 3 中可能發生的時間戳記相關錯誤及建議的解決方案的資訊,請參閱 Athena 引擎版本 3 參考中的 時間戳記變更。
將時間戳記資料寫入 Amazon S3 物件的格式
時間戳記資料應寫入 Amazon S3 物件的格式取決於您使用的資料欄資料類型和SerDe程式庫。
-
如果您有類型為 的資料表欄
DATE
,Athena 預期資料的對應欄或屬性會是ISO格式為 的字串YYYY-MM-DD
,或像是 Parquet 或 的內建日期類型ORC。 -
如果您有類型 的資料表欄
TIME
,Athena 預期資料對應的資料欄或屬性會是ISO格式為 的字串HH:MM:SS
,或像是 Parquet 或 的內建時間類型ORC。 -
如果您有類型為 的資料表欄
TIMESTAMP
,Athena 預期資料的對應資料欄或屬性會是 格式的字串YYYY-MM-DD HH:MM:SS.SSS
(請注意日期和時間之間的空格)ORC,或像是 Parquet、 或 Ion 的內建時間類型。請注意,Athena 不保證無效時間戳記的行為 (例如0000-00-00 08:00:00.000
)。注意
O penCSVSerDe 時間戳記是例外狀況,必須編碼為毫秒解析度 UNIX epoch。
確保時間分割資料符合記錄中的時間戳記欄位
資料的產生者必須確定分割區值與分割區內的資料一致。例如,如果您的資料具有 timestamp
屬性,而您使用 Firehose 將資料載入 Amazon S3,則必須使用動態分割,因為 Firehose 的預設分割為 wall-clock-based。
使用字串做為分割區索引鍵的資料類型
出於效能考量,最好將 STRING
用作分割區索引鍵的資料類型。雖然 Athena 將格式 YYYY-MM-DD
的分割區值識別為您使用 DATE
類型時的日期,而這可能造成效能不彰。因此,我們建議您改用 STRING
資料類型做為分割區索引鍵。
如何寫入同樣按時間分割的時間戳記欄位的查詢
如何寫入同樣按時間分割的時間戳記欄位的查詢,取決於您要查詢的資料表的類型。
Hive 資料表
使用 Athena 中最常用的 Hive 資料表,查詢引擎對資料欄和分割區索引鍵之間的關係一無所知。因此,您必須始終在資料欄和分割區索引鍵的查詢中新增述詞。
例如,假設您有 event_time
資料欄和 event_date
分割區索引鍵,而且想要查詢 23:00 到 03:00 之間的事件。在此案例中,您必須在查詢資料欄和分割區索引鍵中包含述詞,如下列範例所示。
WHERE event_time BETWEEN
start_time
ANDend_time
AND event_date BETWEENstart_time_date
ANDend_time_date
Iceberg 資料表
使用 Iceberg 資料表,您可以使用運算的分割區值,從而簡化查詢。例如,假設您的 Iceberg 資料表是使用如下 PARTITIONED BY
子句建立的:
PARTITIONED BY (event_date month(event_time))
在此案例下,查詢引擎會根據 event_time
述詞的值自動剔除分割區。因此,您的查詢只需要指定 event_time
的述詞,如下列範例所示。
WHERE event_time BETWEEN
start_time
ANDend_time
如需詳細資訊,請參閱建立 Iceberg 資料表。