

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

# 使用 Athena for Spark 中的 Apache Hudi 資料表
<a name="notebooks-spark-table-formats-apache-hudi"></a>

[https://hudi.apache.org/](https://hudi.apache.org/) 是一個開放原始碼資料管理架構，可簡化增量資料的處理。記錄層級的插入、更新, 合併和刪除動作，以更高的精度處理, 從而減少了負荷。

若要使用 Athena for Spark 中的 Apache Hudi 資料表，請設定以下 Spark 屬性。當您選擇 Apache Hudi 做為資料表格式時，依預設，通常會在 Athena for Spark 主控台中為您設定這些屬性。如需相關步驟，請參閱 [步驟 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.spark.sql.hudi.catalog.HoodieCatalog",
"spark.serializer": "org.apache.spark.serializer.KryoSerializer",
"spark.sql.extensions": "org.apache.spark.sql.hudi.HoodieSparkSessionExtension"
```

下列程序將告訴您如何在 Athena for Spark 筆記本中使用 Apache Hudi 資料表。在記事本的新儲存格中執行每個步驟。

**若要在 Athena for Spark 中使用 Apache Hudi 資料表**

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 Hudi 資料表。

   ```
   spark.sql("""
   CREATE TABLE {}.{} (
   language string,
   users_count int
   ) USING HUDI
   TBLPROPERTIES (
   primaryKey = 'language',
   type = 'mor'
   );
   """.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()
   ```