使用時間戳記資料 - Amazon Athena

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用時間戳記資料

本節說明在 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 AND end_time AND event_date BETWEEN start_time_date AND end_time_date

Iceberg 資料表

使用 Iceberg 資料表,您可以使用運算的分割區值,從而簡化查詢。例如,假設您的 Iceberg 資料表是使用如下 PARTITIONED BY 子句建立的:

PARTITIONED BY (event_date month(event_time))

在此案例下,查詢引擎會根據 event_time 述詞的值自動剔除分割區。因此,您的查詢只需要指定 event_time 的述詞,如下列範例所示。

WHERE event_time BETWEEN start_time AND end_time

如需詳細資訊,請參閱建立 Iceberg 資料表