

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

# 使用 在 Amazon S3 資料表上執行 ETL 任務 AWS Glue
<a name="s3-tables-integrating-glue"></a>

AWS Glue 是一種無伺服器資料整合服務，可讓分析使用者輕鬆地探索、準備、移動和整合來自多個來源的資料。您可以使用 AWS Glue 任務來執行擷取、轉換和載入 (ETL) 管道，將資料載入資料湖。如需 的詳細資訊 AWS Glue，請參閱[什麼是 AWS Glue？](https://docs.aws.amazon.com//glue/latest/dg/what-is-glue.html) 《 *AWS Glue 開發人員指南*》中的 。

 AWS Glue 任務會封裝連線至來源資料的指令碼、處理該指令碼，然後將其寫入資料目標。一般而言，任務會執行擷取、轉換和載入 (ETL) 指令碼。任務可以執行專為 Apache Spark 執行時期環境設計的指令碼。您可以監控任務執行以了解執行時間指標，例如完成狀態、持續時間和開始時間。

您可以使用 AWS Glue 任務，透過與 AWS 分析服務的整合來連線至資料表，以處理 S3 資料表中的資料，或直接使用 Amazon S3 Tables Iceberg REST 端點或適用於 的 Amazon S3 Tables Catalog 進行連線Apache Iceberg。本指南涵蓋開始使用 AWS Glue 與 S3 Tables 的基本步驟，包括：

**Topics**
+ [步驟 1 – 事前準備](#glue-etl-prereqs)
+ [步驟 2 – 建立指令碼以連線至資料表儲存貯體](#glue-etl-script)
+ [步驟 3 – 建立查詢資料表 AWS Glue 的任務](#glue-etl-job)

根據您的特定 AWS Glue ETL 任務需求選擇您的存取方法：
+ **AWS 分析服務整合 （建議）** – 當您需要跨多個 AWS 分析服務的集中式中繼資料管理、需要利用現有的 AWS Glue Data Catalog 許可和選用的 Lake Formation，或正在建置與 Athena 或 Amazon EMR AWS 等其他服務整合的生產 ETL 管道時，建議使用。
+ **Amazon S3 Tables Iceberg REST 端點** – 當您需要從支援 的第三方查詢引擎連線至 S3 資料表Apache Iceberg、建置需要直接 REST API 存取的自訂 ETL 應用程式，或需要控制目錄操作而不依賴 AWS Glue Data Catalog 時，建議使用。
+ **Amazon S3 Tables Catalog for Apache Iceberg** – 僅用於需要 Java 用戶端程式庫的舊版應用程式，或特定程式設計案例。由於額外的`JAR`相依性管理和複雜性，因此不建議將此方法用於新的 AWS Glue ETL 任務實作。

**注意**  
[AWS Glue 版本 5.0 或以上](https://docs.aws.amazon.com//glue/latest/dg/release-notes.html)支援 S3 Tables。

## 步驟 1 – 事前準備
<a name="glue-etl-prereqs"></a>

您必須先設定 AWS Glue 可用來執行 AWS Glue 任務的 IAM 角色，才能從任務查詢資料表。選擇您的存取方法，以查看該方法的特定先決條件。

------
#### [ AWS analytics services integration (Recommended) ]

使用 S3 Tables AWS 分析整合來執行 AWS Glue 任務所需的先決條件。
+ [整合資料表儲存貯體與 AWS 分析服務](s3-tables-integrating-aws.md)。
+ [建立 的 IAM 角色 AWS Glue](https://docs.aws.amazon.com//glue/latest/dg/create-an-iam-role.html)。
  + 將 `AmazonS3TablesFullAccess` 受管政策連接至角色。
  + 將 `AmazonS3FullAccess` 受管政策連接至角色。

------
#### [ Amazon S3 Tables Iceberg REST endpoint ]

使用 Amazon S3 Tables Iceberg REST 端點執行 AWS Glue ETL 任務的先決條件。
+ [建立 的 IAM 角色 AWS Glue](https://docs.aws.amazon.com//glue/latest/dg/create-an-iam-role.html)。
  + 將 `AmazonS3TablesFullAccess` 受管政策連接至角色。
  + 將 `AmazonS3FullAccess` 受管政策連接至角色。

------
#### [ Amazon S3 Tables Catalog for Apache Iceberg ]

先決條件使用適用於 的 Amazon S3 Tables Catalog Apache Iceberg 來執行 AWS Glue ETL 任務。
+ [建立 的 IAM 角色 AWS Glue](https://docs.aws.amazon.com//glue/latest/dg/create-an-iam-role.html)。
  + 將 `AmazonS3TablesFullAccess` 受管政策連接至角色。
  + 將 `AmazonS3FullAccess` 受管政策連接至角色。
  + 若要使用 Amazon S3 Tables Catalog for Apache Iceberg，您需要下載用戶端目錄 JAR，並將其上傳至 S3 儲存貯體。

****下載目錄 JAR****

    1. 檢查 [Maven Central](https://mvnrepository.com/artifact/software.amazon.s3tables/s3-tables-catalog-for-iceberg-runtime) 上的最新版本。您可以使用瀏覽器或使用下列命令，從 Maven 中央下載 JAR。請務必將 *version number* 取代為最新版本。

       ```
       wget https://repo1.maven.org/maven2/software/amazon/s3tables/s3-tables-catalog-for-iceberg-runtime/0.1.5/s3-tables-catalog-for-iceberg-runtime-0.1.5.jar                       
       ```

    1. 將下載的 JAR 上傳至您的 AWS Glue IAM 角色可存取的 S3 儲存貯體。您可以使用下列 AWS CLI 命令來上傳 JAR。請務必將 *version number* 取代為最新版本，並使用您自己的 *bucket name* 和 *path*。

       ```
       aws s3 cp s3-tables-catalog-for-iceberg-runtime-0.1.5.jar s3://amzn-s3-demo-bucket/jars/
       ```

------

## 步驟 2 – 建立指令碼以連線至資料表儲存貯體
<a name="glue-etl-script"></a>

若要在執行 AWS Glue ETL 任務時存取資料表資料，您可以為 設定Apache Iceberg連線至 S3 資料表儲存貯體的Spark工作階段。您可以修改現有的指令碼以連線到資料表儲存貯體，或建立新的指令碼。如需建立 AWS Glue 指令碼的詳細資訊，請參閱《 *AWS Glue 開發人員指南*》中的[教學課程：撰寫 AWS Glue for Spark 指令碼](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-intro-tutorial.html)。

您可以透過下列任何 S3 Tables 存取方法，將工作階段設定為連線至資料表儲存貯體：
+ S3 Tables AWS 分析服務整合 （建議）
+ Amazon S3 Tables Iceberg REST 端點
+ Amazon S3 Tables Catalog for Apache Iceberg

從下列存取方法中選擇，以檢視設定指示和組態範例。

------
#### [ AWS analytics services integration (Recommended) ]

使用 AWS 分析服務整合在 Spark 上使用 AWS Glue 查詢資料表的先決條件是，您必須將[資料表儲存貯體與 AWS 分析服務整合](s3-tables-integrating-aws.md)

您可以透過任務中的Spark工作階段或在互動式工作階段中使用 AWS Glue Studio 魔術設定與資料表儲存貯體的連線。若要使用下列範例，請將*預留位置值*取代為您自己的資料表儲存貯體資訊。

**使用 PySpark 指令碼**  
在PySpark指令碼中使用下列程式碼片段，設定 AWS Glue 任務以使用 整合連線至資料表儲存貯體。  

```
spark = SparkSession.builder.appName("SparkIcebergSQL") \
    .config("spark.jars.packages", "org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.4.2") \
    .config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
    .config("spark.sql.defaultCatalog","s3tables") \
    .config("spark.sql.catalog.s3tables", "org.apache.iceberg.spark.SparkCatalog") \
    .config("spark.sql.catalog.s3tables.catalog-impl", "org.apache.iceberg.aws.glue.GlueCatalog") \
    .config("spark.sql.catalog.s3tables.glue.id", "111122223333:s3tablescatalog/amzn-s3-demo-table-bucket") \
    .config("spark.sql.catalog.s3tables.warehouse", "s3://amzn-s3-demo-table-bucket/warehouse/") \
    .getOrCreate()
```

**使用互動式 AWS Glue 工作階段**  
如果您與 AWS Glue 5.0 搭配使用互動式筆記本工作階段，請在程式碼執行之前使用儲存格中的 `%%configure` 魔術命令來指定相同的組態。  

```
%%configure
{"conf": "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions --conf spark.sql.defaultCatalog=s3tables --conf spark.sql.catalog.s3tables=org.apache.iceberg.spark.SparkCatalog --conf spark.sql.catalog.s3tables.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog --conf spark.sql.catalog.s3tables.glue.id=111122223333:s3tablescatalog/amzn-s3-demo-table-bucket --conf spark.sql.catalog.s3tables.warehouse=s3://amzn-s3-demo-table-bucket/warehouse/"}
```

------
#### [ Amazon S3 Tables Iceberg REST endpoint ]

您可以透過任務中的Spark工作階段或在互動式工作階段中使用 AWS Glue Studio 魔術設定與資料表儲存貯體的連線。若要使用下列範例，請將*預留位置值*取代為您自己的資料表儲存貯體資訊。

**使用 PySpark 指令碼**  
在PySpark指令碼中使用下列程式碼片段，設定 AWS Glue 任務以使用端點連線至資料表儲存貯體。  

```
spark = SparkSession.builder.appName("glue-s3-tables-rest") \
    .config("spark.jars.packages", "org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.4.2") \
    .config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
    .config("spark.sql.defaultCatalog", "s3_rest_catalog") \
    .config("spark.sql.catalog.s3_rest_catalog", "org.apache.iceberg.spark.SparkCatalog") \
    .config("spark.sql.catalog.s3_rest_catalog.type", "rest") \
    .config("spark.sql.catalog.s3_rest_catalog.uri", "https://s3tables.Region.amazonaws.com/iceberg") \
    .config("spark.sql.catalog.s3_rest_catalog.warehouse", "arn:aws:s3tables:Region:111122223333:bucket/amzn-s3-demo-table-bucket") \
    .config("spark.sql.catalog.s3_rest_catalog.rest.sigv4-enabled", "true") \
    .config("spark.sql.catalog.s3_rest_catalog.rest.signing-name", "s3tables") \
    .config("spark.sql.catalog.s3_rest_catalog.rest.signing-region", "Region") \
    .config('spark.sql.catalog.s3_rest_catalog.io-impl','org.apache.iceberg.aws.s3.S3FileIO') \
    .config('spark.sql.catalog.s3_rest_catalog.rest-metrics-reporting-enabled','false') \
    .getOrCreate()
```

**使用互動式 AWS Glue 工作階段**  
如果您使用互動式筆記本工作階段搭配 AWS Glue 5.0，請在程式碼執行之前，使用儲存格中的`%%configure`魔術來指定相同的組態。將預留位置值取代為您自己的資料表儲存貯體資訊。  

```
%%configure
{"conf": "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions --conf spark.sql.defaultCatalog=s3_rest_catalog --conf spark.sql.catalog.s3_rest_catalog=org.apache.iceberg.spark.SparkCatalog --conf spark.sql.catalog.s3_rest_catalog.type=rest --conf spark.sql.catalog.s3_rest_catalog.uri=https://s3tables.Region.amazonaws.com/iceberg --conf spark.sql.catalog.s3_rest_catalog.warehouse=arn:aws:s3tables:Region:111122223333:bucket/amzn-s3-demo-table-bucket --conf spark.sql.catalog.s3_rest_catalog.rest.sigv4-enabled=true --conf spark.sql.catalog.s3_rest_catalog.rest.signing-name=s3tables --conf spark.sql.catalog.s3_rest_catalog.rest.signing-region=Region --conf spark.sql.catalog.s3_rest_catalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO --conf spark.sql.catalog.s3_rest_catalog.rest-metrics-reporting-enabled=false"}
```

------
#### [ Amazon S3 Tables Catalog for Apache Iceberg ]

您必須先下載最新的目錄 jar 並將其上傳至 S3 儲存貯體，才能使用 Amazon S3 Tables Catalog for Apache Iceberg 連線到資料表。然後，當您建立任務時，可以將用戶端目錄 JAR 的路徑新增為特殊參數。如需 中任務參數的詳細資訊 AWS Glue，請參閱《 *AWS Glue 開發人員指南*》中的[用於 AWS Glue 任務的特殊參數](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-etl-glue-arguments.html)。

您可以透過任務中的Spark工作階段或在互動式工作階段中使用 AWS Glue Studio 魔術設定與資料表儲存貯體的連線。若要使用下列範例，請將*預留位置值*取代為您自己的資料表儲存貯體資訊。

**使用 PySpark 指令碼**  
在PySpark指令碼中使用下列程式碼片段，設定 AWS Glue 任務以使用 連線到資料表儲存貯體JAR。將預留位置值取代為您自己的資料表儲存貯體資訊。  

```
spark = SparkSession.builder.appName("glue-s3-tables") \
    .config("spark.jars.packages", "org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.4.2") \
    .config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
    .config("spark.sql.defaultCatalog", "s3tablesbucket") \
    .config("spark.sql.catalog.s3tablesbucket", "org.apache.iceberg.spark.SparkCatalog") \
    .config("spark.sql.catalog.s3tablesbucket.catalog-impl", "software.amazon.s3tables.iceberg.S3TablesCatalog") \
    .config("spark.sql.catalog.s3tablesbucket.warehouse", "arn:aws:s3tables:Region:111122223333:bucket/amzn-s3-demo-table-bucket") \
    .getOrCreate()
```

**使用互動式 AWS Glue 工作階段**  
如果您使用互動式筆記本工作階段搭配 AWS Glue 5.0，請在程式碼執行之前，使用儲存格中的`%%configure`魔術來指定相同的組態。將預留位置值取代為您自己的資料表儲存貯體資訊。  

```
%%configure
{"conf": "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions --conf spark.sql.defaultCatalog=s3tablesbucket --conf spark.sql.catalog.s3tablesbucket=org.apache.iceberg.spark.SparkCatalog --conf spark.sql.catalog.s3tablesbucket.catalog-impl=software.amazon.s3tables.iceberg.S3TablesCatalog --conf spark.sql.catalog.s3tablesbucket.warehouse=arn:aws:s3tables:Region:111122223333:bucket/amzn-s3-demo-table-bucket", "extra-jars": "s3://amzn-s3-demo-bucket/jars/s3-tables-catalog-for-iceberg-runtime-0.1.5.jar"}
```

------

### 範例指令碼
<a name="w2aac20c25c29c19c13"></a>

下列範例PySpark指令碼可用來測試使用 AWS Glue 任務查詢 S3 資料表。這些指令碼會連線至您的資料表儲存貯體並執行查詢：建立新的命名空間、建立範例資料表、將資料插入資料表，以及傳回資料表資料。若要使用指令碼，請將*預留位置值*取代為您擁有資料表儲存貯體的資訊。

根據您的 S3 Tables 存取方法，從下列指令碼中選擇。

------
#### [ S3 Tables integration with AWS analytics services ]

```
from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("SparkIcebergSQL") \
    .config("spark.jars.packages", "org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.4.2") \
    .config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
    .config("spark.sql.defaultCatalog","s3tables")
    .config("spark.sql.catalog.s3tables", "org.apache.iceberg.spark.SparkCatalog") \
    .config("spark.sql.catalog.s3tables.catalog-impl", "org.apache.iceberg.aws.glue.GlueCatalog") \
    .config("spark.sql.catalog.s3tables.glue.id", "111122223333:s3tablescatalog/amzn-s3-demo-table-bucket") \
    .config("spark.sql.catalog.s3tables.warehouse", "s3://amzn-s3-demo-table-bucket/bucket/amzn-s3-demo-table-bucket") \
    .getOrCreate()

namespace = "new_namespace"
table = "new_table"

spark.sql("SHOW DATABASES").show()

spark.sql(f"DESCRIBE NAMESPACE {namespace}").show()

spark.sql(f"""
    CREATE TABLE IF NOT EXISTS {namespace}.{table} (
       id INT,
       name STRING,
       value INT
    )
""")

spark.sql(f"""
    INSERT INTO {namespace}.{table}
    VALUES 
       (1, 'ABC', 100),
       (2, 'XYZ', 200)
""")

spark.sql(f"SELECT * FROM {namespace}.{table} LIMIT 10").show()
```

------
#### [ Amazon S3 Tables Iceberg REST endpoint ]

```
from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("glue-s3-tables-rest") \
    .config("spark.jars.packages", "org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.4.2") \
    .config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
    .config("spark.sql.defaultCatalog", "s3_rest_catalog") \
    .config("spark.sql.catalog.s3_rest_catalog", "org.apache.iceberg.spark.SparkCatalog") \
    .config("spark.sql.catalog.s3_rest_catalog.type", "rest") \
    .config("spark.sql.catalog.s3_rest_catalog.uri", "https://s3tables.Region.amazonaws.com/iceberg") \
    .config("spark.sql.catalog.s3_rest_catalog.warehouse", "arn:aws:s3tables:Region:111122223333:bucket/amzn-s3-demo-table-bucket") \
    .config("spark.sql.catalog.s3_rest_catalog.rest.sigv4-enabled", "true") \
    .config("spark.sql.catalog.s3_rest_catalog.rest.signing-name", "s3tables") \
    .config("spark.sql.catalog.s3_rest_catalog.rest.signing-region", "Region") \
    .config('spark.sql.catalog.s3_rest_catalog.io-impl','org.apache.iceberg.aws.s3.S3FileIO') \
    .config('spark.sql.catalog.s3_rest_catalog.rest-metrics-reporting-enabled','false') \
    .getOrCreate()

namespace = "s3_tables_rest_namespace"
table = "new_table_s3_rest"

spark.sql("SHOW DATABASES").show()

spark.sql(f"DESCRIBE NAMESPACE {namespace}").show()

spark.sql(f"""
    CREATE TABLE IF NOT EXISTS {namespace}.{table} (
       id INT,
       name STRING,
       value INT
    )
""")

spark.sql(f"""
    INSERT INTO {namespace}.{table}
    VALUES 
       (1, 'ABC', 100),
       (2, 'XYZ', 200)
""")

spark.sql(f"SELECT * FROM {namespace}.{table} LIMIT 10").show()
```

------
#### [ Amazon S3 Tables Catalog for Apache Iceberg ]

```
from pyspark.sql import SparkSession

#Spark session configurations
spark = SparkSession.builder.appName("glue-s3-tables") \
    .config("spark.jars.packages", "org.apache.iceberg:iceberg-spark-runtime-3.4_2.12:1.4.2") \
    .config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
    .config("spark.sql.defaultCatalog", "s3tablesbucket") \
    .config("spark.sql.catalog.s3tablesbucket", "org.apache.iceberg.spark.SparkCatalog") \
    .config("spark.sql.catalog.s3tablesbucket.catalog-impl", "software.amazon.s3tables.iceberg.S3TablesCatalog") \
    .config("spark.sql.catalog.s3tablesbucket.warehouse", "arn:aws:s3tables:Region:111122223333:bucket/amzn-s3-demo-table-bucket") \
    .getOrCreate()

#Script
namespace = "new_namespace"
table = "new_table"

spark.sql(f"CREATE NAMESPACE IF NOT EXISTS s3tablesbucket.{namespace}")
spark.sql(f"DESCRIBE NAMESPACE {namespace}").show()

spark.sql(f"""
    CREATE TABLE IF NOT EXISTS {namespace}.{table} (
       id INT,
       name STRING,
       value INT
    )
""")

spark.sql(f"""
    INSERT INTO {namespace}.{table}
    VALUES 
       (1, 'ABC', 100),
       (2, 'XYZ', 200)
""")

spark.sql(f"SELECT * FROM {namespace}.{table} LIMIT 10").show()
```

------

## 步驟 3 – 建立查詢資料表 AWS Glue 的任務
<a name="glue-etl-job"></a>

下列程序說明如何設定連線至 S3 資料表儲存貯體 AWS Glue 的任務。您可以使用 AWS CLI 或使用 主控台搭配 AWS Glue Studio 指令碼編輯器來執行此操作。如需詳細資訊，請參閱《AWS Glue 使用者指南》**中的[在 AWS Glue中授權任務](https://docs.aws.amazon.com/glue/latest/dg/author-job-glue.html)。

### 使用 AWS Glue Studio 指令碼編輯器
<a name="tables-glue-studio-job"></a>

下列程序說明如何使用 AWS Glue Studio 指令碼編輯器來建立查詢 S3 資料表的 ETL 任務。

**先決條件**
+ [步驟 1 – 事前準備](#glue-etl-prereqs)
+ [步驟 2 – 建立指令碼以連線至資料表儲存貯體](#glue-etl-script)

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

1. 從導覽窗格中選擇 **ETL 任務**。

1. 選擇**指令碼編輯器**，然後選擇**上傳指令碼**，然後上傳您建立來查詢 S3 資料表的 PySpark 指令碼。

1. 選取**任務詳細資訊**索引標籤，然後針對**基本屬性**輸入下列內容。
   + 對於**名稱**，輸入任務的名稱。
   + 對於 **IAM 角色**，選取您為 AWS Glue建立的角色。

1. (選用) 如果您使用 Amazon S3 Tables Catalog for Apache Iceberg 存取方法，請展開**進階屬性**，並針對**相依 JAR 路徑**，輸入您上傳到 S3 儲存貯體的用戶端目錄 jar 的 S3 URI 做為先決條件。例如 s3://*amzn-s3-demo-bucket1*/*jars*/s3-tables-catalog-for-iceberg-runtime-*0.1.5*.jar

1. 選擇**儲存**以建立任務。

1. 選擇**執行**開始執行任務，然後在**執行**索引標籤下檢閱任務狀態。

### 使用 AWS CLI
<a name="tables-glue-cli-job"></a>

下列程序說明如何使用 AWS CLI 來建立查詢 S3 資料表的 ETL 任務。若要使用命令，請將*預留位置值*取代為您自己的值。

**先決條件**
+ [步驟 1 – 事前準備](#glue-etl-prereqs)
+ [步驟 2 – 建立指令碼以連線至資料表儲存貯體](#glue-etl-script) 並將其上傳至 S3 儲存貯體。

1. 建立 AWS Glue 任務。

   ```
   aws glue create-job \
   --name etl-tables-job \
   --role arn:aws:iam::111122223333:role/AWSGlueServiceRole \
   --command '{
       "Name": "glueetl",
       "ScriptLocation": "s3://amzn-s3-demo-bucket1/scripts/glue-etl-query.py",
       "PythonVersion": "3"
   }' \
   --default-arguments '{
       "--job-language": "python",
       "--class": "GlueApp"
   }' \
   --glue-version "5.0"
   ```
**注意**  
(選用) 如果您使用 Amazon S3 Tables Catalog for Apache Iceberg 存取方法，請使用 `--extra-jars` 參數將用戶端目錄 JAR 新增至 `--default-arguments`。當您新增參數時，將 *input placeholders* 取代為您自己的預留位置。  

   ```
                               "--extra-jars": "s3://amzn-s3-demo-bucket/jar-path/s3-tables-catalog-for-iceberg-runtime-0.1.5.jar" 
   ```

1. 開始執行您的任務。

   ```
   aws glue start-job-run \
   --job-name etl-tables-job
   ```

1. 若要檢閱您的任務狀態，請從上一個命令複製執行 ID，並將其輸入至下列命令。

   ```
   aws glue get-job-run --job-name etl-tables-job \
   --run-id jr_ec9a8a302e71f8483060f87b6c309601ea9ee9c1ffc2db56706dfcceb3d0e1ad
   ```