本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
您可以使用 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/
建置分割區位置,但如果您的資料以不同的方式組織,Athena 也提供自訂此路徑範本的機制。如需這些步驟,請參閱 如何指定自訂 S3 儲存位置。<table-root>
/partition-col-1=<partition-col-1-val>
/partition-col-2=<partition-col-2-val>
/
考量與限制
適用下列注意事項:
-
分割區投影無須在 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 未將檢視的資料表屬性作為分割區投影的組態。若要解決此限制,請在檢視參照之資料表的資料表屬性中設定並啟用分割區投影。
影片
以下影片展示如何使用分割區投影,改善在 Athena 中的查詢效能。