

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

# 填入並管理交易資料表
<a name="populate-otf"></a>

[Apache Iceberg](https://iceberg.apache.org/)、[Apache Hudi](https://hudi.incubator.apache.org/) 和 Linux Foundation [Delta Lake](https://delta.io/) 是開放原始碼資料表格式，旨在處理 Apache Spark 中的大規模資料分析和資料湖工作負載。

您可以使用 AWS Glue Data Catalog 下列方法在 中填入 Iceberg、Hudi 和 Delta Lake 資料表：
+ AWS Glue 編目程式； – AWS Glue 編目程式可以自動探索和填入資料目錄中的 Iceberg、Hudi 和 Delta Lake 資料表中繼資料。如需詳細資訊，請參閱[使用編目程式填入 Data Catalog](add-crawler.md)。
+ AWS Glue ETL 任務 – 您可以建立 ETL 任務，將資料寫入 Iceberg、Hudi 和 Delta Lake 資料表，並在 Data Catalog 中填入其中繼資料。如需詳細資訊，請參閱[搭配 AWS Glue ETL 任務使用資料湖架構](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-datalake-native-frameworks.html)。
+ AWS Glue 主控台、 AWS Lake Formation 主控台 AWS CLI 或 API – 您可以使用 AWS Glue 主控台、Lake Formation 主控台或 API，在 Data Catalog 中建立和管理 Iceberg 資料表定義。

**Topics**
+ [建立 Apache Iceberg 資料表](#creating-iceberg-tables)
+ [最佳化處理 Iceberg 資料表](table-optimizers.md)
+ [最佳化 Iceberg 資料表的查詢效能](iceberg-column-statistics.md)

## 建立 Apache Iceberg 資料表
<a name="creating-iceberg-tables"></a>

可以建立 Apache Iceberg 資料表，在 AWS Glue Data Catalog 中使用 Apache Parquet 資料格式，並將資料存放在 Amazon S3 中。Data Catalog 中的資料表是中繼資料定義，表示資料存放區中的資料。根據預設， AWS Glue 會建立 Iceberg v2 資料表。有關 v1 和 v2 資料表之間的區別，請參閱 Apache Iceberg 文件中的[格式版本變更](https://iceberg.apache.org/spec/#appendix-e-format-version-changes)。

 [Apache Iceberg](https://iceberg.apache.org/) 是開放式的資料表格式，專用於非常大型的分析資料集。Iceberg 可讓您輕鬆地變更結構描述，也稱為結構描述演變，這表示使用者可以從資料表中新增、重新命名或移除資料欄，而不會中斷基礎資料。Iceberg 也支援資料版本控制，可讓使用者追蹤資料隨時間的變化。這可啟用時間歷程功能，允許使用者存取和查詢資料的歷史版本，並分析更新和刪除之間的資料變更。

您可以使用 AWS Glue 或 Lake Formation 主控台或 AWS Glue API 中的 `CreateTable`操作，在 Data Catalog 中建立 Iceberg 資料表。如需詳細資訊，請參閱 [CreateTable 動作 (Python: create\_table)](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-catalog-tables.html#aws-glue-api-catalog-tables-CreateTable)。

當您在 Data Catalog 中建立 Iceberg 資料表時，必須在 Amazon S3 中指定資料表格式和中繼資料檔案路徑，才能執行讀取和寫入。

 當您向 Amazon S3 資料位置註冊時，您可以使用 Lake Formation 使用精細存取控制許可來保護 Iceberg 資料表 AWS Lake Formation。對於 Amazon S3 中的來源資料和未向 Lake Formation 註冊的中繼資料，存取權取決於 Amazon S3 和 AWS Glue 動作的 IAM 許可政策。如需詳細資訊，請參閱[管理許可](https://docs.aws.amazon.com/lake-formation/latest/dg/managing-permissions.html)。

**注意**  
Data Catalog 不支援建立分區和新增 Iceberg 資料表屬性。

### 先決條件
<a name="iceberg-prerequisites"></a>

 若要在 Data Catalog 中建立 Iceberg 資料表，並設定 Lake Formation 資料存取許可，需要滿足下列要求：

1. 

**在沒有向 Lake Formation 註冊資料的情況下建立 Iceberg 資料表所需的許可。**

   除了在 Data Catalog 中建立資料表所需的許可之外，資料表建立者還需要下列許可：
   + `s3:PutObject` on resource arn:aws:s3:::{bucketName}
   + `s3:GetObject` on resource arn:aws:s3:::{bucketName}
   + `s3:DeleteObject`on resource arn:aws:s3:::{bucketName}

1. 

**在向 Lake Formation 註冊資料的情況下建立 Iceberg 資料表所需的許可：**

   若要使用 Lake Formation 來管理和保護資料湖中的資料，請使用 Lake Formation 註冊具有資料表資料的 Amazon S3 位置。這可讓 Lake Formation 將登入資料提供給 AWS 分析服務，例如 Athena、Redshift Spectrum 和 Amazon EMR 來存取資料。如需有關註冊 Amazon S3 位置的詳細資訊，請參閱[將 Amazon S3 位置新增至您的資料湖](https://docs.aws.amazon.com/lake-formation/latest/dg/register-data-lake.html)。

   讀取和寫入向 Lake Formation 註冊的基礎資料的主體需要下列許可：
   + `lakeformation:GetDataAccess`
   + `DATA_LOCATION_ACCESS`

     在某個位置擁有資料位置許可的主體在所有子位置也擁有位置許可。

     如需資料位置許可的詳細資訊，請參閱[基礎資料存取控制](https://docs.aws.amazon.com/lake-formation/latest/dg/access-control-underlying-data.html#data-location-permissions)。

 若要啟用壓縮，服務需要擔任有權在 Data Catalog 中更新資料表的 IAM 角色。如需詳細資訊，請參閱[資料表最佳化先決條件](optimization-prerequisites.md) 

### 建立 Iceberg 資料表
<a name="create-iceberg-table"></a>

您可以使用 AWS Glue 或 Lake Formation 主控台或本頁所記載 AWS Command Line Interface 的方式建立 Iceberg v1 和 v2 資料表。也可以使用 AWS Glue 編目程式來建立 Iceberg 資料表。如需詳細資訊，請參閱《 AWS Glue 開發人員指南》中的 [Data Catalog 和編目程式](https://docs.aws.amazon.com/glue/latest/dg/catalog-and-crawler.html)。

**若要建立 Iceberg 資料表**

------
#### [ Console ]

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

1. 在 Data Catalog 下，選擇**資料表**，然後使用**建立資料表**按鈕來指定下列屬性：
   + **資料表名稱** – 輸入資料表名稱。如果使用 Athena 來存取資料表，請使用《Amazon Athena 使用者指南》中的這些[命名秘訣](https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html)。
   + **資料庫** – 選擇現有資料庫或建立新資料庫。
   + **說明** – 資料表的說明。您可以撰寫說明，來協助您了解資料表的內容。
   + **資料表格式** – 對於**資料表格式**，選擇 Apache Iceberg。
   + **啟用壓縮** – 選擇**啟用壓縮**，將資料表中的小型 Amazon S3 物件壓縮為較大的物件。
   + **IAM 角色** – 為了執行壓縮，服務會代表您擔任 IAM 角色。您可以使用下拉式選單選擇 IAM 角色。請確認角色具有啟用壓縮的必要權限。

     若要進一步了解必要的許可，請參閱 [資料表最佳化先決條件](optimization-prerequisites.md)。
   + **位置** – 指定在 Amazon S3 中存放中繼資料表之資料夾的路徑。Iceberg 需要 Data Catalog 中的中繼資料檔案和位置，才能執行讀取和寫入。
   + **結構描述** – 選擇**新增資料欄**以新增資料欄以及資料欄和資料類型。可以選擇建立空白資料表，稍後再更新結構描述。Data Catalog 支援 Hive 資料類型。如需詳細資訊，請參閱 [Hive 資料類型](https://cwiki.apache.org/confluence/plugins/servlet/mobile?contentId=27838462#content/view/27838462)。

      Iceberg 可讓您在建立資料表之後改進結構描述和分區。可以使用 [Athena 查詢](https://docs.aws.amazon.com/athena/latest/ug/querying-iceberg-evolving-table-schema.html)來更新資料表結構描述，使用 [Spark 查詢](https://iceberg.apache.org/docs/latest/spark-ddl/#alter-table-sql-extensions)來更新分區。

------
#### [ AWS CLI ]

```
aws glue create-table \
    --database-name iceberg-db \
    --region us-west-2 \
    --open-table-format-input '{
      "IcebergInput": { 
           "MetadataOperation": "CREATE",
           "Version": "2"
         }
      }' \
    --table-input '{"Name":"{{test-iceberg-input-demo}}",
            "TableType": "EXTERNAL_TABLE",
            "StorageDescriptor":{ 
               "Columns":[ 
                   {"Name":"col1", "Type":"int"}, 
                   {"Name":"col2", "Type":"int"}, 
                   {"Name":"col3", "Type":"string"}
                ], 
               "Location":"s3://{{DOC_EXAMPLE_BUCKET_ICEBERG}}/"
            }
        }'
```

------

**Topics**
+ [先決條件](#iceberg-prerequisites)
+ [建立 Iceberg 資料表](#create-iceberg-table)