

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

# 最佳化 Iceberg 資料表
<a name="querying-iceberg-data-optimization"></a>

Athena 提供多種最佳化功能，可改善 Apache Iceberg 資料表上的查詢效能。隨著資料累積，由於檔案處理開銷增加，以及套用儲存在 Iceberg 刪除檔案中的資料列層級刪除的運算成本增加，查詢效率可能會降低。為了解決這些挑戰，Athena 支援手動壓縮和清空運算子，以最佳化資料表結構。Athena 也使用 Iceberg 統計資料來啟用成本型查詢最佳化和 Parquet 資料欄索引，以便在查詢執行期間精確刪除資料。這些功能可共同運作，以減少查詢執行時間、將資料掃描降至最低，並降低成本。本主題說明如何使用這些最佳化功能來維護 Iceberg 資料表上的高效能查詢。

## OPTIMIZE
<a name="querying-iceberg-data-optimization-rewrite-data-action"></a>

`OPTIMIZE table REWRITE DATA` 壓縮動作會根據相關 delete 檔案的大小和數量，將資料檔案重寫成更好的版面配置。如需有關語法和資料表屬性的詳細資訊，則請參閱 [OPTIMIZE](optimize-statement.md)。

### 範例
<a name="querying-iceberg-data-optimization-example"></a>

下列範例將 delete 檔案合併到資料檔案中，並產生接近目標檔案大小的檔案，其中 `category` 的值是 `c1`。

```
OPTIMIZE iceberg_table REWRITE DATA USING BIN_PACK
  WHERE category = 'c1'
```

## VACUUM
<a name="querying-iceberg-vacuum"></a>

`VACUUM` 會執行[快照過期](https://iceberg.apache.org/docs/latest/spark-procedures/#expire_snapshots)和[孤立檔案移除](https://iceberg.apache.org/docs/latest/spark-procedures/#remove_orphan_files)。這些動作會減少中繼資料大小，並移除不在目前資料表狀態的檔案，這些檔案也早於為資料表指定的保留期間。如需有關語法的詳細資訊，則請參閱 [VACUUM](vacuum-statement.md)。

### 範例
<a name="querying-iceberg-vacuum-example"></a>

下列範例會使用資料表屬性來將資料表 `iceberg_table` 設定為保留最近三天的資料，然後使用 `VACUUM` 將舊快照集設為過期，並從資料表中移除孤立檔案。

```
ALTER TABLE iceberg_table SET TBLPROPERTIES (
  'vacuum_max_snapshot_age_seconds'='259200'
)

VACUUM iceberg_table
```

## 使用 Iceberg 資料表統計資料
<a name="querying-iceberg-data-optimization-statistics"></a>

Athena 的成本型最佳化工具使用 Iceberg 統計資料來產生最佳查詢計劃。為您的 Iceberg 資料表產生統計資料後，Athena 會自動使用此資訊來做出有關聯結排序、篩選條件和彙總行為的智慧型決策，通常可改善查詢效能並降低成本。

當您使用 S3 Tables 時，預設會開啟 Iceberg 統計資料。對於其他 Iceberg 資料表，Athena 會使用資料表屬性`use_iceberg_statistics`來判斷是否利用統計資料進行成本型最佳化。若要開始使用，請參閱*AWS Glue 《 使用者指南*》中的[使用資料欄統計資料最佳化查詢效能](https://docs.aws.amazon.com//glue/latest/dg/column-statistics.html)，或使用 [Athena 主控台](https://docs.aws.amazon.com/athena/latest/ug/cost-based-optimizer.html)在 Iceberg 資料表上產生隨需統計資料。

## 使用 Parquet 資料欄索引
<a name="querying-iceberg-data-optimization-parquet-column-indexing"></a>

Parquet 資料欄索引除了資料列群組層級統計資料之外，還利用頁面層級的最小/最大統計資料，讓 Athena 能夠在查詢執行期間執行更精確的資料刪除。這可讓 Athena 略過資料列群組中不必要的頁面，大幅減少掃描的資料量並改善查詢效能。它最適合對排序資料欄使用選擇性篩選條件述詞的查詢，改善執行時間和資料掃描效率，同時減少 Athena 從 Amazon S3 讀取所需的資料量。

如果基礎 Parquet 檔案中存在資料欄索引，則 Athena 預設會將 Parquet 資料欄索引與 S3 Tables 搭配使用。對於其他 Iceberg 資料表，Athena 會使用 `use_iceberg_parquet_column_index` 屬性來決定是否使用 Parquet 檔案中的資料欄索引。使用 AWS Glue 主控台或 `UpdateTable` API 設定此資料表屬性。