

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

# 透過 Amazon Athena 使用分割區投影
<a name="partition-projection"></a>

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

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

## 了解分割區剔除與分割區投影
<a name="partition-projection-pruning-vs-projection"></a>

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

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

## 如何使用分割區投影
<a name="partition-projection-using"></a>

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

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

## 一些使用案例
<a name="partition-projection-use-cases"></a>

適合使用分割區投影的案例包括下列：
+ 針對高度分割資料表的查詢無法如您所願的那麼快完成。
+ 隨著在資料中建立新的日期或時間分割區，您定期將分割區新增至資料表。使用分割區投影，您可以設定相對日期範圍，以便在新資料到達時使用。
+ 您在 Amazon S3 中有高度分割的資料。資料在 AWS Glue Data Catalog 或 Hive 中繼存放區中建立模型並不切實際，您的查詢只會讀取其中的一小部分。

### 可投影的分割區結構
<a name="partition-projection-known-data-structures"></a>

當您的分割區遵循可預測的模式 (例如，但不限於下列項目) 時，分割區投影最容易設定：
+ **整數** – 任何連續的整數序列，例如 `[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 可以用於分割區投影。

### 如何自訂分割區路徑範本
<a name="partition-projection-custom-s3-storage-locations"></a>

依預設，Athena 會使用格式 `s3://amzn-s3-demo-bucket/{{<table-root>}}/partition-col-1={{<partition-col-1-val>}}/partition-col-2={{<partition-col-2-val>}}/` 建置分割區位置，但如果您的資料以不同的方式組織，Athena 也提供自訂此路徑範本的機制。如需這些步驟，請參閱 [如何指定自訂 S3 儲存位置](partition-projection-setting-up.md#partition-projection-specifying-custom-s3-storage-locations)。

## 考量和限制
<a name="partition-projection-considerations-and-limitations"></a>

適用下列注意事項：
+ 分割區投影無須在 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 未將檢視的資料表屬性作為分割區投影的組態。若要解決此限制，請在檢視參照之資料表的資料表屬性中設定並啟用分割區投影。

## 影片
<a name="partition-projection-video"></a>

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

[![AWS Videos](http://img.youtube.com/vi/iUD5pPpcyZk/0.jpg)](http://www.youtube.com/watch?v=iUD5pPpcyZk)


**Topics**
+ [了解分割區剔除與分割區投影](#partition-projection-pruning-vs-projection)
+ [如何使用分割區投影](#partition-projection-using)
+ [一些使用案例](#partition-projection-use-cases)
+ [考量和限制](#partition-projection-considerations-and-limitations)
+ [影片](#partition-projection-video)
+ [設定分割區投影](partition-projection-setting-up.md)
+ [支援的分割區投影類型](partition-projection-supported-types.md)
+ [使用動態 ID 分割](partition-projection-dynamic-id-partitioning.md)
+ [Amazon Data Firehose 範例](partition-projection-kinesis-firehose-example.md)