

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

# 排除 Amazon S3 儲存體方案
<a name="aws-glue-programming-etl-storage-classes"></a>

如果您執行的 AWS Glue ETL 任務會從 Amazon Simple Storage Service (Amazon S3) 讀取檔案或分割區，則您可排除部分 Amazon S3 儲存類別類型。

Amazon S3 會提供下列儲存體方案：
+ `STANDARD` — 適用於經常存取資料的一般用途儲存體。
+ `INTELLIGENT_TIERING` — 適用於存取模式不明或不斷變化的資料。
+ `STANDARD_IA` 和 `ONEZONE_IA` — 適用於長期存放但不常存取的資料。
+ `GLACIER`、`DEEP_ARCHIVE` 和 `REDUCED_REDUNDANCY` — 適用於長期存檔和數位儲存。

如需詳細資訊，請參閱 *Amazon S3 開發人員指南*中的 [Amazon S3 儲存體方案](https://docs.aws.amazon.com/AmazonS3/latest/userguide/storage-class-intro.html)。

本節中的範例會示範如何排除 `GLACIER` 和 `DEEP_ARCHIVE` 儲存體方案。這些方案可讓您列出相關檔案，但只有在檔案經過還原的情況下，才能進行讀取。(如需詳細資訊，請參閱 *Amazon S3 開發人員指南*中的[還原封存物件](https://docs.aws.amazon.com/AmazonS3/latest/dev/restoring-objects.html)。)

透過使用儲存體方案排除功能，您即可確保 AWS Glue 任務會在具有這些儲存體方案分割區的資料表上執行。如果沒有進行排除，則從這些方案中讀取資料的任務就會失敗，並出現以下錯誤訊息：AmazonS3Exception: The operation is not valid for the object's storage class (AmazonS3Exception：本操作不適用於該物件的儲存體方案)。

在 AWS Glue 中篩選 Amazon S3 儲存類別有幾種不同方法。

**Topics**
+ [在建立動態框架時排除 Amazon S3 儲存體方案](#aws-glue-programming-etl-storage-classes-dynamic-frame)
+ [在資料目錄資料表上排除 Amazon S3 儲存體方案](#aws-glue-programming-etl-storage-classes-table)

## 在建立動態框架時排除 Amazon S3 儲存體方案
<a name="aws-glue-programming-etl-storage-classes-dynamic-frame"></a>

若要在建立動態框架時排除 Amazon S3 儲存類別，請使用 `additionalOptions` 中的 `excludeStorageClasses`。AWS Glue 會自動使用自己的 Amazon S3 `Lister` 實作來列出對應至特定儲存體方案的檔案，並加以排除。

下列 Python 和 Scala 範例會示範在建立動態框架時，排除 `GLACIER` 和 `DEEP_ARCHIVE` 儲存體方案的方法。

Python 範例：

```
glueContext.create_dynamic_frame.from_catalog(
    database = "my_database",
    tableName = "my_table_name",
    redshift_tmp_dir = "",
    transformation_ctx = "my_transformation_context",
    additional_options = {
        "excludeStorageClasses" : ["GLACIER", "DEEP_ARCHIVE"]
    }
)
```

Scala 範例：

```
val* *df = glueContext.getCatalogSource(
    nameSpace, tableName, "", "my_transformation_context",  
    additionalOptions = JsonOptions(
        Map("excludeStorageClasses" -> List("GLACIER", "DEEP_ARCHIVE"))
    )
).getDynamicFrame()
```

## 在資料目錄資料表上排除 Amazon S3 儲存體方案
<a name="aws-glue-programming-etl-storage-classes-table"></a>

您可以在 Glue Data Catalog AWS Glue 中指定 ETL AWS 任務用作資料表參數的儲存類別排除。您可以使用 AWS Command Line Interface (AWS CLI) 或以程式設計方式使用 API 將此參數包含在 `CreateTable`操作中。如需詳細資訊，請參閱[資料表結構](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-Table)和 [CreateTable](https://docs.aws.amazon.com/glue/latest/webapi/API_CreateTable.html)。

您也可以在 AWS Glue 主控台上指定要排除的儲存體方案。

**排除 Amazon S3 儲存體方案 (主控台)**

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

1. 在左側的導覽窗格中，選擇 **Tables (資料表)**。

1. 在清單中選擇資料表名稱，然後選擇 **Edit table (編輯資料表)**。

1. 在 **Table properties (資料表屬性)** 中，新增 **excludeStorageClasses** 做為索引鍵，並將 **[\$1"GLACIER\$1",\$1"DEEP\$1ARCHIVE\$1"]** 做為值。

1. 選擇**套用**。