

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

# 建立資料表
<a name="tables-described"></a>

即使執行爬蟲程式是清查資料存放區中資料的建議方法，您也可以 AWS Glue Data Catalog 手動將中繼資料表新增至 。此方法可讓您對中繼資料定義進行更多控制，並根據特定需求自訂中繼資料定義。

也可手動將資料表新增到 Data Catalog ，方式如下：
+ 使用 AWS Glue 主控台，在 AWS Glue Data Catalog中手動建立資料表。如需詳細資訊，請參閱[使用主控台建立資料表](#console-tables)。
+ 在 [AWS Glue API](aws-glue-api.md) 中使用 `CreateTable` 操作，在 AWS Glue Data Catalog中建立資料表。如需詳細資訊，請參閱[CreateTable 動作 (Python: create\$1table)](aws-glue-api-catalog-tables.md#aws-glue-api-catalog-tables-CreateTable)。
+ 使用 CloudFormation 範本。如需詳細資訊，請參閱[適用於 AWS Glue 的AWS CloudFormation](populate-with-cloudformation-templates.md)。

當您使用主控台或 API 手動定義資料表時，需指定資料表結構描述和分類欄位的值，以表示資料來源中的資料類型和格式。如果是爬蟲程式來建立資料表，資料格式和結構描述就會由內建分類器或自訂分類器決定。如需使用 AWS Glue 主控台建立資料表的詳細資訊，請參閱 [使用主控台建立資料表](#console-tables)。

**Topics**
+ [資料表分割區](#tables-partition)
+ [資料表資源連結](#tables-resource-links)
+ [使用主控台建立資料表](#console-tables)
+ [建立分區索引](partition-indexes.md)
+ [使用爬蟲程式更新手動建立的資料目錄資料表](#update-manual-tables)
+ [Data Catalog 資料表屬性](#table-properties)

## 資料表分割區
<a name="tables-partition"></a>

Amazon Simple Storage Service (Amazon S3) 資料夾的 AWS Glue 資料表定義可描述已分割的資料表。例如，為了改善查詢效能，分割的資料表可能使用月份名稱為金鑰，以將每月資料分隔成不同的檔案。在 AWS Glue 中，資料表定義包含資料表的分割金鑰。AWS Glue 在評估 Amazon S3 資料夾中的資料以編目資料表時，會決定要新增個別資料表或分割資料表。

您可以在資料表上建立分割區索引來擷取分割區的子集，而不是載入資料表中的所有分割區。如需使用分割區索引的詳細資訊，請參閱[建立分區索引](partition-indexes.md)。

要讓 AWS Glue 為 Amazon S3 資料夾建立分割資料表，以下所有條件都必須為 true：
+ 檔案的結構描述類似，由 AWS Glue 決定。
+ 檔案的日期格式相同。
+ 檔案的壓縮格式相同。

例如，您可能擁有一個名稱為 `my-app-bucket` 的 Amazon S3 儲存貯體，用於存放 iOS 和 Android 應用程式的銷售資料。資料按照年、月、日分割。iOS 和 Android 銷售的資料檔案有相同的結構描述、日期格式和壓縮格式。在 中 AWS Glue Data Catalog，AWS Glue爬蟲程式會使用年、月和日分割索引鍵建立一個資料表定義。

以下的 Amazon S3 `my-app-bucket` 清單顯示了一些分割區。`=` 符號用於指派分割區金鑰值。

```
   my-app-bucket/Sales/year=2010/month=feb/day=1/iOS.csv
   my-app-bucket/Sales/year=2010/month=feb/day=1/Android.csv
   my-app-bucket/Sales/year=2010/month=feb/day=2/iOS.csv
   my-app-bucket/Sales/year=2010/month=feb/day=2/Android.csv
   ...
   my-app-bucket/Sales/year=2017/month=feb/day=4/iOS.csv
   my-app-bucket/Sales/year=2017/month=feb/day=4/Android.csv
```

## 資料表資源連結
<a name="tables-resource-links"></a>


|  | 
| --- |
| AWS Glue 主控台最近已更新。目前版本的主控台不支援資料表資源連結。 | 

 Data Catalog 也可以包含資料表的*資源連結*。資料表資源連結是本機或共用資料表的連結。您目前只可以在 AWS Lake Formation建立資源連結。建立資料表的資源連結後，您可以在任何使用資料表名稱的地方使用資源連結名稱。連同您擁有或與您共用的資料表，資料表資源連結會由 `glue:GetTables()` 傳回，並顯示為 AWS Glue 主控台中 **Tables (資料表)** 的項目。

 Data Catalog 也可以包含資料庫資源連結。

如需資源連結的詳細資訊，請參閱 *AWS Lake Formation 開發人員指南*中的[建立資源連結](https://docs.aws.amazon.com/lake-formation/latest/dg/creating-resource-links.html)。

## 使用主控台建立資料表
<a name="console-tables"></a>

中的資料表 AWS Glue Data Catalog 是中繼資料定義，代表資料存放區中的資料。您可在執行爬蟲程式時建立資料表，或者也可以在 AWS Glue 主控台中手動建立資料表。在 ** 主控台中的 **TablesAWS Glue (資料表) 清單，會顯示您資料表中繼資料的值。在建立 ETL (擷取、轉換和載入) 任務時，您可以使用資料表的定義來指定來源與目標。

**注意**  
隨著 AWS 管理主控台的最新變更，您可能需要修改現有的 IAM 角色，才能擁有 [https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-SearchTables](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-SearchTables)許可。針對新角色建立，`SearchTables` API 許可已新增為預設值。

若要開始使用，請登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/) 的 AWS Glue 主控台。選擇 **Tables** (資料表) 索引標籤，然後使用 **Add tables** (新增資料表) 按鈕來建立資料表 (藉由使用爬蟲程式或手動輸入屬性)。

### 在主控台上新增資料表
<a name="console-tables-add"></a>

若要使用爬蟲程式來新增資料表，請依序選擇 **Add tables** (新增資料表)、**Add tables using a crawler** (使用爬蟲程式來新增資料表)。然後，依照 **Add crawler** (新增爬蟲程式) 精靈中的說明來進行操作。當爬蟲程式執行時，資料表就會新增至 AWS Glue Data Catalog。如需詳細資訊，請參閱[使用編目程式填入 Data Catalog](add-crawler.md)。

如果您知道在 Data Catalog 中建立 Amazon Simple Storage Service (Amazon S3) 資料表定義所需的屬性，則可以使用資料表精靈來建立。依序選擇 **Add tables** (新增資料表)、**Add table manually** (手動新增資料表)，然後依照 **Add table** (新增資料表) 精靈中的說明來進行操作。

透過主控台來手動新增資料表時，請注意下列事項：
+ 如果您預計從 Amazon Athena 存取資料表，則應提供只有英數字元和底線字元的名稱。如需詳細資訊，請參閱 [Athena 名稱](https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html#ate-table-database-and-column-names-allow-only-underscore-special-characters)。
+ 您的來源資料的位置必須是 Amazon S3 路徑。
+ 資料的資料格式必須符合精靈中列出的其中一種格式。對應的分類 SerDe 和其他資料表屬性會根據選擇的格式自動填入。您可以使用下列格式定義資料表：  
**Avro**  
Apache Avro JSON 二進位格式。  
**CSV**  
字元分隔值。您也可以指定逗號、管道、分號、標籤或 Ctrl-A 的分隔符號。  
**JSON**  
JavaScript 物件標記法。  
**XML**  
可擴展標記語言的格式。指定定義資料中資料列的 XML 標籤。資料欄是在資料列標籤中定義。  
**Parquet**  
Apache Parquet 單欄式儲存。  
**ORC**  
最佳化資料列單欄式 (ORC) 檔案格式。旨在高效存放 Hive 資料的格式。
+ 您可以定義資料表的分割區索引鍵。
+ 目前，透過主控台所建立的分區資料表，不能在 ETL 工作中使用。

### 資料表屬性
<a name="console-tables-attributes"></a>

下列是一些重要的資料表屬性：

**名稱**  
此名稱在資料表建立已決定，您無法變更。在許多的 AWS Glue 操作中，都會參照資料表的名稱。

**資料庫**  
您的資料表所在的容器物件。此物件包含存在於 中的資料表組織， AWS Glue Data Catalog 可能與資料存放區中的組織不同。當您刪除資料庫，也會從 Data Catalog 刪除資料庫中內含的所有資料表。

**Description**  
資料表的說明。您可以撰寫說明，來協助您了解資料表的內容。

**資料表格式**  
指定建立標準 AWS Glue 資料表或 Apache Iceberg 格式的資料表。  
Data Catalog 提供下列資料表最佳化選項，以管理資料表儲存並提高 Iceberg 資料表的查詢效能。  
+ **壓縮** – 合併和重寫資料檔案，移除過時的資料，並將分段資料合併為更大、更有效的檔案。
+ **快照保留 **– 快照是 Iceberg 資料表的時間戳記版本。快照保留組態可讓客戶強制執行保留快照的時間長度，以及要保留的快照數量。設定快照保留最佳化工具可透過移除較舊、不必要的快照及其相關聯的基礎檔案，協助管理儲存體負荷。
+ **孤立檔案刪除** – 孤立檔案是 Iceberg 資料表中繼資料不再參考的檔案。這些檔案可能會隨著時間累積，特別是在資料表刪除或 ETL 任務失敗等操作之後。啟用孤立檔案刪除 AWS Glue 可讓 定期識別和移除這些不必要的檔案，釋放儲存空間。
如需詳細資訊，請參閱[最佳化處理 Iceberg 資料表](table-optimizers.md)。

**最佳化組態**  
可以使用預設的設定或自訂設定來啟用資料表最佳化工具。

**IAM 角色**  
 若要執行資料表最佳化工具，服務會代表您擔任 IAM 角色。您可以使用下拉式選單選擇 IAM 角色。請確認角色具有啟用壓縮的必要權限。  
若要進一步了解 IAM 角色的必要權限，請參閱 [資料表最佳化先決條件](optimization-prerequisites.md)。

**Location**  
指標，指向此資料表定義所代表資料存放區中資料的位置。

**分類**  
建立資料表時所提供的分類值。這通常是在爬蟲程式執行時寫入，用來指定來源資料的格式。

**上次更新**  
此資料表在 Data Catalog 中更新的時間和日期 (UTC)。

**加入日期**  
此資料表新增至 Data Catalog 的時間和日期 (UTC)。

**已棄用**  
如果 AWS Glue 發現 Data Catalog 中的資料表不再存在於其原始資料存放區，會在 Data Catalog 中將此資料表標記為已作廢。如果您執行的任務參照了已作廢的資料表，則任務可能會失敗。針對參照已作廢資料表的任務來進行編輯，將這些做為來源和目標的資料表移除。我們建議您刪除不再需要的已作廢資料表。

**連線**  
如果 AWS Glue 需要連線至您的資料存放區，連線的名稱會與資料表相關。

### 檢視與管理資料表詳細資訊
<a name="console-tables-details"></a>

若要檢視現有資料表的詳細資訊，請在清單中選擇資料表名稱，然後選擇 **Action, View details** (動作，檢視詳細資訊)。

資料表的詳細資訊包括資料表的屬性及其結構描述。此檢視會顯示資料表的結構描述，包括欄名稱 (依資料表定義的順序排列)、資料類型和分區金鑰欄位。如果欄為複雜的類型，您可以選擇 **View properties** (檢視屬性) 來顯示該欄位結構的詳細資訊，如下列範例所示：

```
{
"StorageDescriptor": 
    {
      "cols": {
         "FieldSchema": [
           {
             "name": "primary-1",
             "type": "CHAR",
             "comment": ""
           },
           {
             "name": "second ",
             "type": "STRING",
             "comment": ""
           }
         ]
      },
      "location": "s3://aws-logs-111122223333-us-east-1",
      "inputFormat": "",
      "outputFormat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
      "compressed": "false", 
      "numBuckets": "0",
      "SerDeInfo": {
           "name": "",
           "serializationLib": "org.apache.hadoop.hive.serde2.OpenCSVSerde",
           "parameters": {
               "separatorChar": "|"
            }
      },
      "bucketCols": [],
      "sortCols": [],
      "parameters": {},
      "SkewedInfo": {},
      "storedAsSubDirectories": "false"
    },
    "parameters": {
       "classification": "csv"
    }
}
```

如需關於資料表的屬性 (例如 `StorageDescriptor`) 的詳細資訊，請參閱 [StorageDescriptor 結構](aws-glue-api-catalog-tables.md#aws-glue-api-catalog-tables-StorageDescriptor)。

若要變更資料表的結構描述，請選擇 **Edit schema** (編輯結構描述) 來新增和移除欄、變更欄名稱和變更資料類型。

 若要比較資料表的不同版本 (包括其結構描述)，請選擇 **Compare versions** (比較版本) 來檢視資料表兩種結構描述版本的並列比較。如需詳細資訊，請參閱[比較資料表結構描述版本](#console-tables-schema-comparison)。

若要顯示 Amazon S3 分區中所包含的檔案，請選擇 **View partition (檢視分割區)**。對於 Amazon S3 資料表，**Key (金鑰)** 欄會顯示分區金鑰，用來將來源資料存放區中的資料表分區。分割是一種根據索引鍵資料欄的值將資料表分割為相關部分的方法，例如日期、位置或部門。如需關於分區的詳細資訊，請搜尋網際網路，取得「Hive 分區」的相關資訊。

**注意**  
若要取得檢視資料表詳細資訊的逐步指引，請參閱主控台中的 **Explore table** (了解資料表) 教學。

### 比較資料表結構描述版本
<a name="console-tables-schema-comparison"></a>

 當您比較兩個版本的資料表結構定義時，您可以透過展開和折疊巢狀資料列、並排比較兩個版本的結構定義，以及並排檢視資料表屬性，來比較巢狀資料列變更。

 比較版本 

1.  從 AWS Glue 主控台中，依序選擇**資料表**、**動作**和**比較版本**。  
![\[螢幕擷取畫面會顯示選取後的「動作」按鈕。下拉式功能表會顯示「比較版本」選項。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/catalog-table-compare-versions.png)

1.  選擇版本下拉式選單，以選擇要比較的版本。比較結構描述時，「結構描述」索引標籤會以橙色反白顯示。

1.  當您比較兩個版本之間的資料表時，資料表結構描述會顯示在畫面的左側和右側。這可讓您透過並排比較「資料欄名稱」、「資料類型」、「索引鍵」和「註解」欄位，以視覺化方式判斷變更。發生變更時，彩色圖示會顯示所做變更的類型。
   +  已刪除 – 以紅色圖示顯示，指示資料欄已從舊版資料表結構描述中移除的位置。
   +  已編輯或已移動 – 以藍色圖示顯示，指示資料欄在較新版資料表結構描述中修改或移動的位置。
   +  已新增 – 以綠色圖示顯示，指示資料欄新增至較新版資料表結構描述的位置。
   +  巢狀變更 – 以黃色圖示顯示，指示巢狀資料欄包含變更的位置。選擇要展開的資料欄，並檢視已刪除、已編輯、已移動或已新增的資料欄。  
![\[螢幕擷取畫面會顯示兩個版本之間的資料表結構描述比較 左側是較舊版本。右側是較新版本。刪除圖示位於從較舊版本移除且不再於較新版本提供的資料欄旁邊。\]](http://docs.aws.amazon.com/zh_tw/glue/latest/dg/images/catalog-table-version-comparison.png)

1.  使用篩選欄位搜尋列，根據您在此輸入的字元顯示欄位。如果您在任一資料表版本中輸入資料欄名稱，則篩選的欄位會顯示在兩個資料表版本中，以顯示發生變更的位置。

1.  若要比較屬性，請選擇**屬性索引標籤**。

1.  若要停止比較版本，請選擇**停止比較**，以返回資料表清單。

# 建立分區索引
<a name="partition-indexes"></a>

隨著時間的推移，數十萬個分割區被新增到資料表中。[GetPartitions API](https://docs.aws.amazon.com/glue/latest/webapi/API_GetPartitions.html) 用於擷取資料表中的分割區。API 會傳回符合請求中所提供表達式的分區。

讓我們以 *sales\$1data* 資料表為例，其由 *Country*、*Category*、*Year*、*Month* 和 *creationDate* 索引鍵分區。如果想要取得 2020 年度 *2020 年 8 月 15 日之後* *Books* 類別的所有銷售項目，則必須使用表達式 "Category = 'Books' and creationDate > '2020-08-15'" 對 Data Catalog 發出 `GetPartitions` 請求。

如果資料表上沒有分割區索引，AWS Glue 會載入資料表的所有分割區，然後使用使用者在 `GetPartitions` 請求中提供的查詢表達式來篩選載入的分割區。查詢需要更多的時間來執行，因為沒有索引的資料表上的分割區數目會增加。使用索引，`GetPartitions` 查詢可嘗試擷取分割區的子集，而不是載入資料表中的所有分割區。

**Topics**
+ [關於分割區索引](#partition-index-1)
+ [建立具有分割區索引的資料表](#partition-index-creating-table)
+ [將分割區索引新增至現有資料表](#partition-index-existing-table)
+ [描述資料表上的分割區索引](#partition-index-describing)
+ [使用分割區索引的限制](#partition-index-limitations)
+ [使用索引進行最佳化的 GetPartitions 呼叫](#partition-index-getpartitions)
+ [與引擎整合](#partition-index-integration-engines)

## 關於分割區索引
<a name="partition-index-1"></a>

在您建立分割區索引時，指定已存在於指定資料表上的分割區索引鍵清單。分割區索引是在資料表中定義的分割區索引鍵的子清單。分割區索引可以在資料表上定義的分割區索引鍵的任何排列上建立。對於上述 *sales\$1data* 資料表，可能的索引包括 (country, category, creationDate)、(country, category, year)、(country, category)、(country)、(category, country, year, month) 等。

 Data Catalog 會依建立索引時提供的順序連接分割區值。當分割區新增至資料表時，索引會一致地建立。可以針對字串 (string、char 和 varchar)、數字 (int、bigint、long、tinyint 和 smallint) 和日期 (yyyy-MM-dd) 資料欄類型建立索引。

**支援的資料類型**
+ 日期 – ISO 格式的日期，例如 `YYYY-MM-DD`。例如，日期 `2020-08-15`。該格式使用連字號 (‐) 來分隔年、月和日。索引的允許日期範圍從 `0000-01-01` 到 `9999-12-31`。
+ 字串 – 用單引號或雙引號括住的字串文字。
+ 字元 – 固定長度的字元資料，介於 1 到 255 的指定長度，例如 char(10)。
+ 可變字元 – 可變長度的字元資料，介於 1 到 65535 的指定長度，例如 varchar(10)。
+ 數值 – int、biint、long、tinyint 和 smallint

數值、字串、日期資料類型的索引支援 =、>、> =、<、<= 以及 between 運算子。索引解決方案目前只支援 `AND` 邏輯運算子。使用索引進行篩選的表達式會忽略具有運算子「LIKE」、「IN」、「OR」和「NOT」的子表達式。篩選忽略的子表達式會在套用索引篩選之後擷取的分割區上完成。

對於新增到資料表中的每個分割區，會有一個相應的索引項目建立。對於具有 'n' 個分割區的資料表，1 個分割區索引會產生 'n' 個分割區索引項目。同一個資料表上的 'm' 個分割區索引會產生 'm\$1n' 個分割區索引項目。每個分割區索引項目將根據目前的 AWS Glue Data Catalog 儲存體的定價政策。如需儲存物件定價的詳細資訊，請參閱 [AWS Glue 定價](https://aws.amazon.com/glue/pricing/)。

## 建立具有分割區索引的資料表
<a name="partition-index-creating-table"></a>

您可以在建立資料表期間建立分割區索引。`CreateTable` 要求會取得 [`PartitionIndex` 物件](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-PartitionIndex)的清單作為輸入。指定資料表上最多可以建立 3 個分割區索引。每個分割區索引都需要一個名稱和為資料表定義的 `partitionKeys` 清單。在資料表上建立的索引可以使用 [`GetPartitionIndexes` API](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-GetPartitionIndexes) 擷取

## 將分割區索引新增至現有資料表
<a name="partition-index-existing-table"></a>

若要將分割區索引新增至現有資料表，請使用 `CreatePartitionIndex` 操作。每個 `CreatePartitionIndex` 操作只能建立一個 `PartitionIndex`。新增索引不會影響資料表的可用性，因為資料表會在建立索引時繼續可用。

新增分割區的索引狀態設定為 CREATING，並啟動索引資料的建立。如果建立索引的處理程序成功，indexStatus 會更新為 ACTIVE，並且對於不成功的處理程序，索引狀態會更新為 FAILED。索引建立可能會因多種原因而失敗，您可以使用 `GetPartitionIndexes` 作業擷取失敗詳細資訊。可能失敗如下：
+ ENCRYPTED\$1PARTITION\$1ERROR — 不支援在具有加密分割區的資料表上建立索引。
+ INVALID\$1PARTITION\$1TYPE\$1DATA\$1ERROR — 當 `partitionKey` 值不是對應 `partitionKey` 資料類型的有效值時觀察到。例如：具有 'int' 資料類型的 `partitionKey` 有一個 'foo' 值。
+ MISSING\$1PARTITION\$1VALUE\$1ERROR — 當 `indexedKey` 的 `partitionValue` 不存在時觀察到。當資料表沒有一致地進行分割時，可能會發生這種情況。
+ UNSUPPORTED\$1PARTITION\$1CHARACTER\$1ERROR — 當索引分割區索引鍵的值包含字元 \$1u0000、\$1u0001 或 \$1u0002 時觀察到。
+ INTERAL\$1ERROR — 建立索引時發生內部錯誤。

## 描述資料表上的分割區索引
<a name="partition-index-describing"></a>

若要擷取資料表上建立的分割區索引，請使用 `GetPartitionIndexes` 操作。回應會傳回資料表上的所有索引，以及每個索引的目前狀態 (`IndexStatus`)。

分割區索引的 `IndexStatus` 會是下列其中一項：
+ `CREATING` – 正在建立索引，尚無法使用。
+ `ACTIVE`— 索引已準備就緒可供使用。請求可以使用索引來執行最佳化的查詢。
+ `DELETING` – 正在刪除索引，無法再使用。處於活動狀態的索引可以使用 `DeletePartitionIndex` 請求，該請求將狀態從 ACTIVE 移動到 DELETING。
+ `FAILED` — 在現有資料表上建立索引失敗。每個資料表儲存最後 10 個失敗的索引。

在現有資料表上建立的索引的可能狀態轉換是：
+ CREATING → ACTIVE → DELETING
+ CREATING → FAILED

## 使用分割區索引的限制
<a name="partition-index-limitations"></a>

建立分割區索引之後，請注意下列資料表和分割區功能變更：

**建立新分區 (新增索引之後)**  
在資料表上建立分割區索引之後，新增至資料表的所有新分割區都會驗證索引鍵的資料類型檢查。索引索引鍵的分割區值將針對資料類型格式進行驗證。如果資料類型檢查失敗，建立分割區作業將會失敗。對於 *sales\$1data*，如果針對 (category, year) 索引鍵建立索引，其中 category 為 `string` 類型且 year 為 `int` 類型，則建立具有 YEAR 值為「foo」的新分割區將失敗。

啟用索引之後，新增具有索引索引鍵值的分割區，其字元為 U\$10000、U\$100001 和 U\$10002 將會開始失敗。

**資料表更新**  
在資料表上建立分割區索引之後，您就無法修改現有分割區索引鍵的分割區索引鍵名稱，也無法變更與索引註冊之索引鍵的類型或順序。

## 使用索引進行最佳化的 GetPartitions 呼叫
<a name="partition-index-getpartitions"></a>

當您在具有索引的資料表上呼叫 `GetPartitions`，您可以包含表達式，如果適用， Data Catalog 將使用索引 (如果可能)。索引的第一個索引鍵應該在用於篩選索引的表達式中傳遞。篩選中的索引最佳化會盡最大努力應用。 Data Catalog 會嘗試盡可能使用索引最佳化，但如果遺失索引或不受支援的運算子，它會回退到載入所有分割區的現有實作。

於上述 *sales\$1data* 資料表，讓我們新增索引 [Country, Category, Year]。如果表達式中未傳遞 "Country"，註冊的索引將無法使用索引篩選分割區。您最多可以新增 3 個索引，以支援各種查詢模式。

讓我們舉一些範例表達式，看看索引如何在它們上運作：


| 表達式 | 索引的使用方式 | 
| --- | --- | 
|  Country = 'US'  |  索引將用於篩選分割區。  | 
|  Country = 'US' and Category = 'Shoes'  |  索引將用於篩選分割區。  | 
|  Category = 'Shoes'  |  表達式中沒有提供 "country"，所以不會使用索引。所有分割區將被載入以傳回回應。  | 
|  Country = 'US' and Category = 'Shoes' and Year > '2018'  |  索引將用於篩選分割區。  | 
|  Country = 'US' and Category = 'Shoes' and Year > '2018' and month = 2  |  索引將用於擷取 country = "US" 和 category = "shoes" 和 year > 2018 的所有分割區。然後，將執行月份表達式上的篩選。  | 
|  Country = 'US' AND Category = 'Shoes' OR Year > '2018'  |  由於 `OR` 運算子存在於表達式中，因此不會使用索引。  | 
|  Country = 'US' AND Category = 'Shoes' AND (Year = 2017 OR Year = '2018')  |  索引將用於擷取 country = "US" 和 category = "shoes" 的所有分割區然後執行對年份表達式的篩選。  | 
|  Country in ('US', 'UK') AND Category = 'Shoes'  |  由於目前不支援 `IN` 運算子，因此不會使用索引進行篩選。  | 
|  Country = 'US' AND Category in ('Shoes', 'Books')  |  索引將用於擷取具有 country = "US" 的所有分割區，然後執行對「類別」表達式的篩選。  | 
|  Country = 'US' AND Category in ('Shoes', 'Books') AND (creationDate > '2023-9-01'  |  索引將用於擷取 country = "US" 且 creationDate > '2023-9-01' 的所有分區，然後執行對「類別」表達式的篩選。  | 

## 與引擎整合
<a name="partition-index-integration-engines"></a>

AWS Glue 中的索引處於 ACTIVE 狀態後，Redshift Spectrum、Amazon EMR 和 AWS Glue ETL Spark DataFrames 就可以利用索引來擷取分區。[Athena](https://docs.aws.amazon.com/athena/latest/ug/glue-best-practices.html#glue-best-practices-partition-index) 和 [AWS Glue ETL 動態框架](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-partitions.html#aws-glue-programming-etl-partitions-cat-predicates)會要求您遵循額外的步驟以利用索引進行查詢改進。

### 啟用分區篩選
<a name="enable-partition-filtering-athena"></a>

若要在 Athena 中啟用分區篩選，需要更新資料表屬性，如下所示：

1. 在 AWS Glue 主控台**的資料目錄**下，選擇**資料表**。

1. 選擇 表格。

1. 在**動作**下，選擇**編輯資料表**。

1. 在**資料表屬性**下，新增下列項目：
   + 索引鍵 –`partition_filtering.enabled`
   + 值 – `true`

1. 選擇**套用**。

或者，也可以在 Athena 中執行 [ALTER TABLE SET PROPERTIES](https://docs.aws.amazon.com/athena/latest/ug/alter-table-set-tblproperties.html) 查詢來設定此參數。

```
ALTER TABLE partition_index.table_with_index
SET TBLPROPERTIES ('partition_filtering.enabled' = 'true')
```

## 使用爬蟲程式更新手動建立的資料目錄資料表
<a name="update-manual-tables"></a>

您可能想要手動建立 AWS Glue Data Catalog 資料表，然後使用AWS Glue爬蟲程式保持更新狀態。按排程執行的爬蟲程式可以新增新的分割區，並更新含有任何結構描述變更的資料表。這也適用於從 Apache Hive 中繼存放區移轉來的資料表。

若要執行此作業，當您定義爬蟲程式時，請指定一或多個現有的 Data Catalog 資料表，而不是指定一或多個資料存放區做為抓取來源。爬蟲程式即會抓取目錄資料表指定的資料存放區。在這種情況下，系統就不會建立任何新的資料表，而會更新您手動建立的資料表。

以下是建議您手動建立目錄資料表，並指定目錄資料表做為爬蟲程式來源的其他原因：
+ 您想選擇目錄資料表名稱，而不倚賴目錄資料表命名演算法。
+ 在檔案格式可能會干擾分割區偵測，但資料來源路徑中誤存該檔案的情況下，您想防止建立新的資料表。

如需詳細資訊，請參閱[步驟 2：選擇資料來源和分類器](define-crawler-choose-data-sources.md)。

## Data Catalog 資料表屬性
<a name="table-properties"></a>

 如 CLI AWS 中已知的資料表屬性或參數，是未經驗證的索引鍵和值字串。您可以在資料表中設定自己的屬性，以支援在 AWS Glue外部使用 Data Catalog。使用 Data Catalog 的其他 服務也可以這樣做。在執行任務或爬蟲程式時 AWS Glue 設定一些資料表屬性。除非另有說明，否則這些屬性僅供內部使用，我們不支援其以當前形式繼續存在，也不支援手動變更這些屬性時的產品行為。

 如需 AWS Glue 爬蟲程式所設定資料表屬性的詳細資訊，請參閱 [爬蟲程式在 Data Catalog 資料表上設定的參數](table-properties-crawler.md)。