

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

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

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

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

您可以使用 Lake Formation 主控台或 AWS Glue API 中的 `CreateTable`操作，在 Data Catalog 中建立 Iceberg 資料表。如需詳細資訊，請參閱 [CreateTable 動作 (Python: create\$1table)](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 許可政策。如需詳細資訊，請參閱[管理 Lake Formation 許可](managing-permissions.md)。

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

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

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

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

1. 

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

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

1. 

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

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

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

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

     如需資料位置許可的詳細資訊，請參閱 [基礎資料存取控制](access-control-underlying-data.md)。

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

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

您可以使用 Lake Formation 主控台或此頁面所記載 AWS Command Line Interface 的方式建立 Iceberg v1 和 v2 資料表。您也可以使用 AWS Glue 主控台或 建立 Iceberg 資料表 AWS Glue 編目程式。如需詳細資訊，請參閱《 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/lakeformation/](https://console.aws.amazon.com/lakeformation/) 開啟 Lake Formation 主控台。

1. 在 Data Catalog 下，選擇**資料表**，然後使用**建立資料表**按鈕來指定下列屬性：
   + **資料表名稱**：輸入資料表的名稱。如果使用 Athena 來存取資料表，請使用《Amazon Athena 使用者指南》中的這些[命名秘訣](https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html)。
   + **資料庫**：選擇現有的資料庫或建立新的資料庫。
   + **描述**：資料表的描述。您可以撰寫說明，來協助您了解資料表的內容。
   + **資料表格式**：針對**資料表格式**，選擇 Apache Iceberg。  
![\[使用資料表最佳化選項選取 Apache Iceberg 資料表選項。\]](http://docs.aws.amazon.com/zh_tw/lake-formation/latest/dg/images/table-optimization.png)
   + **資料表最佳化**
     + **壓縮** – 合併和重寫資料檔案，移除過時的資料，並將分段資料合併為更大、更有效的檔案。
     + **快照保留 **– 快照是 Iceberg 資料表的時間戳記版本。快照保留組態可讓客戶強制執行保留快照的時間長度，以及要保留的快照數量。設定快照保留最佳化工具可透過移除較舊、不必要的快照及其相關聯的基礎檔案，協助管理儲存體負荷。
     + **孤立檔案刪除** – 孤立檔案是 Iceberg 資料表中繼資料不再參考的檔案。這些檔案可能會隨著時間累積，特別是在資料表刪除或 ETL 任務失敗等操作之後。啟用孤立檔案刪除 AWS Glue 可讓 定期識別和移除這些不必要的檔案，釋放儲存空間。

     如需詳細資訊，請參閱[最佳化 Iceberg 資料表](https://docs.aws.amazon.com/glue/latest/dg/table-optimizers.html)。
   + **IAM 角色**：若要執行壓縮，服務會代表您擔任 IAM 角色。您可以使用下拉式選單選擇 IAM 角色。請確認角色具有啟用壓縮的必要權限。

     若要進一步了解所需的許可，請參閱[資料表最佳化先決條件](https://docs.aws.amazon.com/glue/latest/dg/optimization-prerequisites.html)。
   + **位置**：指定 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/"
            }
        }'
```

------