搭配 Amazon Athena 使用分割區投影 - Amazon Athena

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

搭配 Amazon Athena 使用分割區投影

您可以使用 Athena 中的分割區投影來加速高度分割資料表的查詢處理,以及自動化分割區管理。

在分割區投影中,Athena 會使用您直接在 AWS Glue中的資料表設定的資料表屬性來計算分割區的值和位置。資料表屬性可讓 Athena「投影」或判斷必要的分割區資訊,而不必在 AWS Glue Data Catalog中執行耗時的中繼資料查詢。因為記憶體內操作通常比遠端操作更快,所以分割區投影可以減少對高度分割資料表的查詢執行期。取決於查詢和基礎資料的特定特性,分割區投影可能大幅減少受限於分割區中繼資料擷取的查詢執行期。

了解分割區剪除與分割區投影

分割區清除會收集中繼資料,並將它「修剪」至只限適用於查詢的分割區。這通常可加快查詢速度。Athena 會對所有具有分割區資料欄的資料表使用分割區剔除,包括為分割區投影設定的資料表。

一般而言,在處理查詢時,Athena 會GetPartitions先呼叫 , AWS Glue Data Catalog 然後再執行分割區刪除。如果資料表有大量分割區,使用 GetPartitions 可能會對效能造成負面影響。若要避免這種情況,您可以使用分割區投影。分割區投影讓 Athena 可以避免呼叫 GetPartitions,因為分割區投影組態可提供 Athena 建置分割區本身的全部所需資訊。

如何使用分割區投影

若要使用分割區投影,您可以在 AWS Glue Data Catalog 外部 Hive 中繼存放區 或 中的資料表屬性中,指定每個分割區資料欄的分割區值和投影類型範圍。資料表上的這些自訂屬性可讓 Athena 知道在資料表上執行查詢時預期的分割區模式。在查詢執行期間,Athena 會使用此資訊投影分割區值,而不是從 AWS Glue Data Catalog 或外部 Hive 中繼存放區擷取分割區值。這不僅可以減少查詢執行期,還可以自動化分割區管理,因為它不需要在 Athena、 AWS Glue或外部 Hive 中繼存放區中手動建立分割區。

重要

在資料表上啟用分割區投影會導致 Athena 忽略註冊到 AWS Glue Data Catalog 或 Hive 中繼存放區中資料表的任何分割區中繼資料。

某些使用案例

適合使用分割區投影的案例包括下列:

  • 針對高度分割資料表的查詢無法如您所願的那麼快完成。

  • 隨著在資料中建立新的日期或時間分割區,您定期將分割區新增至資料表。使用分割區投影,您可以設定相對日期範圍,以便在新資料到達時使用。

  • 您在 Amazon S3 中有高度分割的資料。資料無法在您的 AWS Glue Data Catalog 或 Hive 中繼存放區中建立模型,而且您的查詢只會讀取其中的一小部分。

可投影的分割區結構

當您的分割區遵循可預測的模式 (例如,但不限於下列項目) 時,分割區投影最容易設定:

  • 整數 – 任何連續的整數序列,例如 [1, 2, 3, 4, ..., 1000][0500, 0550, 0600, ..., 2500]

  • 日期 – 任何連續的日期或日期時間序列,例如 [20200101, 20200102, ..., 20201231][1-1-2020 00:00:00, 1-1-2020 01:00:00, ..., 12-31-2020 23:00:00]

  • 列舉值 – 一組有限列舉值,例如機場代碼或 AWS 區域。

  • AWS 服務 日誌 – AWS 服務 日誌通常具有已知結構,您可以在其中指定分割區結構 AWS Glue ,因此 Athena 可以用於分割區投影。

如何自訂分割區路徑範本

依預設,Athena 會使用格式 s3://amzn-s3-demo-bucket/<table-root>/partition-col-1=<partition-col-1-val>/partition-col-2=<partition-col-2-val>/ 建置分割區位置,但如果您的資料以不同的方式組織,Athena 也提供自訂此路徑範本的機制。如需這些步驟,請參閱 如何指定自訂 S3 儲存位置

考量與限制

適用下列注意事項:

  • 分割區投影無須在 AWS Glue 或外部 Hive 中繼存放區手動指定分割區。

  • 當您在資料表上啟用分割區投影時,Athena 會忽略該資料表的 AWS Glue Data Catalog 或外部 Hive 中繼存放區中的任何分割區中繼資料。

  • 如果投影的分割區不存在於 Amazon S3 中,Athena 仍會投影該分割區。Athena 不會擲回錯誤,但也不會傳回任何資料。不過,如果太多分割區是空的,效能可能會比傳統 AWS Glue 分割區慢。如果超過一半的投影分割區是空的,建議您使用傳統分割區。

  • 如果數值超過分割區投影定義的範圍邊界,查詢不會傳回錯誤。查詢反而會執行,但不會傳回任何資料行。例如,如果您擁有自 2020 年起並定義為 'projection.timestamp.range'='2020/01/01,NOW' 的時間相關資料,如 SELECT * FROM table-name WHERE timestamp = '2019/02/02' 等的查詢將成功完成,但不會傳回任何資料行。

  • 分割區投影只適用於透過 Athena 查詢資料表時。如果透過 Amazon Redshift Spectrum、Athena for Spark 或 Amazon 等其他服務讀取相同的資料表EMR,則會使用標準分割區中繼資料。

  • 由於分割區投影是 DML限定的功能, SHOW PARTITIONS 不會列出 Athena 投影但未在 AWS Glue 目錄或外部 Hive 中繼存放區中註冊的分割區。

  • Athena 未將檢視的資料表屬性作為分割區投影的組態。若要解決此限制,請在檢視參照之資料表的資料表屬性中設定並啟用分割區投影。

  • Lake Formation 資料篩選條件無法與 Athena 引擎第 2 版中的分割區投影搭配使用。

影片

以下影片展示如何使用分割區投影,改善在 Athena 中的查詢效能。