

# Athena for Spark で Apache Iceberg テーブルを使用する
<a name="notebooks-spark-table-formats-apache-iceberg"></a>

[Apache Iceberg](https://iceberg.apache.org/) は、Amazon Simple Storage Service (Amazon S3) の大規模データセット用のオープンテーブル形式です。大きなテーブルに対する高速のクエリパフォーマンス、アトミックコミット、同時書き込み、および SQL 互換テーブルの進化を提供します。

Athena for Spark で Apache Iceberg テーブルを使用するには、次の Spark プロパティを設定します。これらのプロパティは、Athena for Spark コンソールでテーブル形式として Apache Iceberg を選択したときに、デフォルトで自動的に設定されます。手順については、「[ステップ 4: セッションの詳細を編集する](notebooks-spark-getting-started.md#notebooks-spark-getting-started-editing-session-details)」または「[ステップ 7: 独自のノートブックを作成する](notebooks-spark-getting-started.md#notebooks-spark-getting-started-creating-your-own-notebook)」を参照してください。

```
"spark.sql.catalog.spark_catalog": "org.apache.iceberg.spark.SparkSessionCatalog",
"spark.sql.catalog.spark_catalog.catalog-impl": "org.apache.iceberg.aws.glue.GlueCatalog",
"spark.sql.catalog.spark_catalog.io-impl": "org.apache.iceberg.aws.s3.S3FileIO",
"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions"
```

以下の手順では、Athena for Spark ノートブックで Apache Iceberg テーブルを使用する方法を示しています。ノートブックの新しいセルで各ステップを実行します。

**Athena for Spark で Apache Iceberg テーブルを使用する方法**

1. ノートブックで使用する定数を定義します。

   ```
   DB_NAME = "{{NEW_DB_NAME}}"
   TABLE_NAME = "{{NEW_TABLE_NAME}}"
   TABLE_S3_LOCATION = "s3://amzn-s3-demo-bucket"
   ```

1. Apache Spark [DataFrame](https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/dataframe.html) を作成します。

   ```
   columns = ["language","users_count"]
   data = [("Golang", 3000)]
   df = spark.createDataFrame(data, columns)
   ```

1. データベースを作成します。

   ```
   spark.sql("CREATE DATABASE {} LOCATION '{}'".format({{DB_NAME}}, {{TABLE_S3_LOCATION}}))
   ```

1. 空の Apache Iceberg テーブルを作成します。

   ```
   spark.sql("""
   CREATE TABLE {}.{} (
   language string,
   users_count int
   ) USING ICEBERG
   """.format({{DB_NAME}}, {{TABLE_NAME}}))
   ```

1. テーブルにデータ行を挿入します。

   ```
   spark.sql("""INSERT INTO {}.{} VALUES ('Golang', 3000)""".format({{DB_NAME}}, {{TABLE_NAME}}))
   ```

1. 新しいテーブルをクエリできることを確認します。

   ```
   spark.sql("SELECT * FROM {}.{}".format({{DB_NAME}}, {{TABLE_NAME}})).show()
   ```

Spark DataFrames と Iceberg テーブルの使用に関する詳細と例については、Apache Iceberg ドキュメントの「[Spark クエリ](https://iceberg.apache.org/docs/latest/spark-queries/)」を参照してください。