

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

# 設定分割區投影
<a name="partition-projection-setting-up"></a>

在資料表屬性中設定分割區投影共有兩個步驟：

1. 為每個分割區資料欄指定資料範圍和相關模式，或使用自訂範本。

1. 啟用資料表的分割區投影。

**注意**  
在您將分割區投影屬性新增至現有的資料表之前，您要設定分割區投影屬性的分割區資料欄必須已經存在於資料表結構描述中。如果分割區資料欄尚不存在，您必須手動將分割區資料欄新增至現有資料表。 AWS Glue 不會自動為您執行此步驟。

本節說明如何設定 的資料表屬性 AWS Glue。若要設定它們，您可以使用 AWS Glue 主控台、Athena [CREATE TABLE](create-table.md)查詢或 [AWS Glue API](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api.html)操作。下列程序說明如何在 AWS Glue 主控台中設定屬性。

**使用 AWS Glue 主控台設定和啟用分割區投影**

1. 登入 AWS 管理主控台 ，並在 https：//[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) 開啟 AWS Glue 主控台。

1. 選擇 **Tables** (資料表) 索引標籤。

   在 **Tables** (資料表) 索引標籤上，您可以編輯現有資料表，或選擇 **Add tables** (新增資料表) 以建立新的資料表。如需有關手動或使用爬蟲程式新增資料表的資訊，請參閱《AWS Glue 開發人員指南》**中的 [在 AWS Glue 主控台上使用資料表。](https://docs.aws.amazon.com/glue/latest/dg/console-tables.html)

1. 在資料表清單中，選擇您要編輯之資料表的連結。  
![\[在 AWS Glue 主控台中，選擇要編輯的資料表。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/partition-projection-1.png)

1. 選擇 **Actions** (動作)、**Edit table** (編輯資料表)。

1. 在 **Edit table** (編輯資料表) 頁面的 **Table properties** (資料表屬性) 區段中，針對每個分割的資料欄新增下列索引鍵/值組：

   1. 對於 **Key** (索引鍵)，新增 `projection.columnName.type`。

   1. 對於 **Value** (值)，新增其中一個支援的類型：`enum`、`integer`、`date` 或 `injected`。如需詳細資訊，請參閱[支援的分割區投影類型](partition-projection-supported-types.md)。

1. 遵循[支援的分割區投影類型](partition-projection-supported-types.md)中的指導，根據您的組態需求新增額外的索引鍵/值組。

   下列範例資料表組態會設定分割區投影的 `year` 資料欄，限制可傳回值的範圍為 2010 年到 2016 年。  
![\[在 AWS Glue 主控台資料表屬性中為分割區資料欄設定分割區投影。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/partition-projection-3.png)

1. 新增索引鍵/值組以啟用分割區投影。對於 **Key** (索引鍵)，輸入 `projection.enabled`，對於其 **Value** (值)，輸入 `true`。
**注意**  
您可以透過將 `projection.enabled` 設定為 `false`，隨時停用此資料表上的分割區投影。

1. 完成時，請選擇 **Save (儲存)**。

1. 在 Athena 查詢編輯器中，測試查詢您為資料表設定的資料欄。

   下列範例查詢使用 `SELECT DISTINCT` 從 `year` 資料欄傳回唯一值。資料庫包含 1987 年到 2016 年的資料，但 `projection.year.range` 屬性將傳回的值限制為 2010 年到 2016 年。  
![\[查詢使用分割區投影的資料欄。\]](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/partition-projection-5.png)
**注意**  
如果您將 `projection.enabled` 設定為 `true` 但無法設定一或多個分割區資料欄，您會收到如下所示的錯誤訊息：  
`HIVE_METASTORE_ERROR: Table database_name.table_name is configured for partition projection, but the following partition columns are missing projection configuration: [column_name] (table database_name.table_name)`.

## 如何指定自訂 S3 儲存位置
<a name="partition-projection-specifying-custom-s3-storage-locations"></a>

在 中編輯資料表屬性時 AWS Glue，您也可以為投影的分割區指定自訂 Amazon S3 路徑範本。自訂範本可讓 Athena 將分割區值正確地對應到不遵循典型 `.../column=value/...` 模式的自訂 Amazon S3 檔案位置。

使用自訂範本是選擇性的。不過，如果您使用自訂範本，則範本必須包含每個分割區資料欄的預留位置。範本位置必須以正斜線結尾，以便分割的資料檔案存在於每個分割區的「資料夾」中。

**指定自訂分割區位置範本**

1. 依照[使用 AWS Glue 主控台設定和啟用分割區投影](#partition-projection-setting-up-procedure)的步驟，新增額外的鍵/值對，指定自訂範本，如下所示：

   1. 在 **Key** (索引鍵) 欄位，輸入 `storage.location.template`。

   1. 對於 **Value** (值)，指定包含每個分割區資料欄之預留位置的位置。請確定每個預留位置 (及 S3 路徑本身) 是以單一正斜線結尾。

      下列範例範本值假設資料表具有分割區資料欄 `a`、`b` 和 `c`。

      ```
      s3://amzn-s3-demo-bucket/table_root/a=${a}/${b}/some_static_subdirectory/${c}/      
      ```

      ```
      s3://amzn-s3-demo-bucket/table_root/c=${c}/${b}/some_static_subdirectory/${a}/${b}/${c}/${c}/      
      ```

      對於相同的資料表，下列範例範本值無效，因為它不包含資料欄 `c` 的預留位置。

      ```
      s3://amzn-s3-demo-bucket/table_root/a=${a}/${b}/some_static_subdirectory/         
      ```

1. 選擇 **Apply** (套用)。