

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

# 將 Iceberg 叢集與 Trino 搭配使用
<a name="emr-iceberg-use-trino-cluster"></a>

從 Amazon EMR 6.6.0 版開始，您可以將 Iceberg 與 Trino 叢集搭配使用。

在本教學課程中，您會使用 AWS CLI 在 Amazon EMR Trino 叢集上使用 Iceberg。若要使用主控台建立已安裝 Iceberg 的叢集，請遵循[使用 Amazon Athena、Amazon EMR 和 AWS Glue 建置 Apache Iceberg 資料湖](https://aws.amazon.com/blogs//big-data/build-an-apache-iceberg-data-lake-using-amazon-athena-amazon-emr-and-aws-glue/)中的步驟進行。

## 建立 Iceberg 叢集
<a name="emr-iceberg-create-cluster-trino"></a>

若要在 Amazon EMR 上使用 Iceberg AWS CLI，請先使用下列步驟建立叢集。如需使用 指定 Iceberg 分類的資訊 AWS CLI，請參閱 [當您建立叢集 AWS CLI 時，使用 提供組態](emr-configure-apps-create-cluster.md#emr-configure-apps-create-cluster-cli)或 [在建立叢集時使用 Java SDK 提供組態](emr-configure-apps-create-cluster.md#emr-configure-apps-create-cluster-sdk)。

1. 使用下列內容建立 `configurations.json` 檔案。例如，如果您想要使用 Hive 中繼存放區作為型錄，您的檔案應具有下列內容。

   ```
   [
     {
       "Classification": "trino-connector-iceberg",
       "Properties": {
         "connector.name": "iceberg",
         "hive.metastore.uri": "thrift://localhost:9083"
       }
     }
   ]
   ```

   如果您想要使用 AWS Glue Data Catalog 做為您的存放區，您的檔案應具有下列內容。

   ```
   [
     {
       "Classification": "trino-connector-iceberg",
       "Properties": {
         "connector.name": "iceberg",
         "iceberg.catalog.type": "glue"
       }
     }
   ]
   ```

   從 Amazon EMR 7.7.0 開始，包含 屬性 *fs.native-s3.enabled=true*

   ```
   [
     { 
       "Classification": "trino-connector-iceberg",
       "Properties": {
         "connector.name": "iceberg",
         "iceberg.catalog.type": "glue",
         "fs.native-s3.enabled": "true"
       }           
     }                 
   ]
   ```

1. 使用下列組態建立叢集，以您自己的組態取代範例 Amazon S3 儲存貯體路徑和金鑰名稱。

   ```
   aws emr create-cluster --release-label emr-6.7.0 \
   --applications Name=Trino \
   --region us-east-1 \
   --name My_Trino_Iceberg_Cluster \
   --log-uri s3://amzn-s3-demo-bucket \
   --configurations file://configurations.json \
   --instance-groups InstanceGroupType=MASTER,InstanceCount=1,InstanceType=c3.4xlarge InstanceGroupType=CORE,InstanceCount=3,InstanceType=c3.4xlarge \ 
   --use-default-roles \
   --ec2-attributes KeyName=<key-name>
   ```

## 初始化 Iceberg 的 Trino 工作階段
<a name="emr-iceberg-initialize-trino"></a>

若要初始化 Trino 工作階段，請執行下列命令。

```
trino-cli --catalog iceberg
```

## 寫入 Iceberg 資料表
<a name="emr-iceberg-write-to-table-trino"></a>

使用下列 SQL 命令建立並寫入至資料表。

```
trino> SHOW SCHEMAS;
trino> CREATE TABLE default.iceberg_table (
            id int,
            data varchar,
            category varchar)
       WITH (
            format = 'PARQUET',
            partitioning = ARRAY['category', 'bucket(id, 16)'],
            location = 's3://amzn-s3-demo-bucket/<prefix>')
          
trino> INSERT INTO default.iceberg_table VALUES (1,'a','c1'), (2,'b','c2'), (3,'c','c3');
```

## 從 Iceberg 的資料表讀取
<a name="emr-iceberg-read-from-table-trino"></a>

若要從 Iceberg 資料表讀取，請執行下列命令。

```
trino> SELECT * from default.iceberg_table;
```

## 將 Iceberg 與 Trino 搭配使用的考量
<a name="trino-considerations"></a>
+ Amazon EMR 6.5 不會以原生方式提供對 Iceberg 的 Trino Iceberg Catalog 支援。Trino 需要使用 Iceberg v0.11，因此建議為 Trino 啟動獨立於 Spark 叢集的 Amazon EMR 叢集，並在該叢集上包含 Iceberg v0.11。
+ 使用 AWS Glue 做為 Iceberg 的目錄時，請確定您在其中建立資料表的資料庫存在於 Glue AWS 中。如果您使用的是 服務， AWS Lake Formation 但無法載入目錄，請確定您有權存取服務來執行 命令。
+ Iceberg Glue 整合不適用於 Redshift 受管儲存目錄。