

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Mengakses tabel Amazon S3 dengan Katalog Tabel Amazon S3 untuk Gunung Es Apache
<a name="s3-tables-client-catalog"></a>

Anda dapat mengakses tabel S3 dari mesin kueri sumber terbuka seperti Apache Spark dengan menggunakan Katalog Tabel Amazon S3 untuk katalog Apache Iceberg klien. Amazon S3 Tables Catalog for Apache Iceberg adalah pustaka sumber terbuka yang dihosting oleh AWS Labs. Ini bekerja dengan menerjemahkan Apache Iceberg operasi di mesin kueri Anda (seperti penemuan tabel, pembaruan metadata, dan menambahkan atau menghapus tabel) ke dalam operasi API Tabel S3.

Katalog Tabel Amazon S3 untuk Apache Iceberg didistribusikan sebagai Maven JAR panggilan`s3-tables-catalog-for-iceberg.jar`. Anda dapat membangun katalog klien JAR dari [AWS Labs GitHub repositori ](https://github.com/awslabs/s3-tables-catalog) atau mengunduhnya dari [ Maven](https://mvnrepository.com/artifact/software.amazon.s3tables/s3-tables-catalog-for-iceberg). Saat menghubungkan ke tabel, katalog klien JAR digunakan sebagai ketergantungan saat Anda menginisialisasi Spark sesi untukApache Iceberg.

## Menggunakan Katalog Tabel Amazon S3 untuk Gunung Es Apache dengan Apache Spark
<a name="s3-tables-integrating-open-source-spark"></a>

Anda dapat menggunakan Katalog Tabel Amazon S3 untuk katalog Apache Iceberg klien untuk menyambung ke tabel dari aplikasi sumber terbuka saat Anda menginisialisasi sesi. Spark Dalam konfigurasi sesi Anda, Anda menentukan dependen Iceberg si Amazon S3, dan membuat katalog kustom yang menggunakan bucket tabel Anda sebagai gudang metadata.

****Prasyarat****
+ Identitas IAM dengan akses ke bucket tabel dan tindakan Tabel S3 Anda. Untuk informasi selengkapnya, lihat [Manajemen akses untuk Tabel S3](s3-tables-setting-up.md).

**Untuk menginisialisasi a Spark sesi menggunakan Katalog Tabel Amazon S3 untuk Gunung Es Apache**
+ Inisialisasi Spark menggunakan perintah berikut. Untuk menggunakan perintah, ganti katalog tabel Amazon S3 untuk Apache Iceberg {{version number}} dengan versi terbaru dari [AWS Labs GitHub repositori](https://github.com/awslabs/s3-tables-catalog), dan {{table bucket ARN}} dengan bucket tabel ARN Anda sendiri.

  ```
  spark-shell \
  --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.6.1,software.amazon.s3tables:s3-tables-catalog-for-iceberg-runtime:{{0.1.4 }}\
  --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:{{us-east-1}}:{{111122223333}}:bucket/{{amzn-s3-demo-table-bucket}} \
  --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions
  ```

### Mengkueri tabel S3 dengan Spark SQL
<a name="query-with-spark"></a>

Dengan menggunakanSpark, Anda dapat menjalankan operasi DQL, DML, dan DDL pada tabel S3. Saat Anda menanyakan tabel, Anda menggunakan nama tabel yang sepenuhnya memenuhi syarat, termasuk nama katalog sesi mengikuti pola ini:

`{{CatalogName}}.{{NamespaceName}}.{{TableName}}`

Contoh kueri berikut menunjukkan beberapa cara Anda dapat berinteraksi dengan tabel S3. Untuk menggunakan kueri contoh ini di mesin kueri Anda, ganti {{user input placeholder}} nilainya dengan milik Anda sendiri.

**Untuk menanyakan tabel dengan Spark**
+ Buat namespace

  ```
  spark.sql(" CREATE NAMESPACE IF NOT EXISTS {{s3tablesbucket}}.{{my_namespace}}")
  ```
+ Membuat tabel

  ```
  spark.sql(" CREATE TABLE IF NOT EXISTS {{s3tablesbucket}}.{{my_namespace}}.`{{my_table}}` 
  ( id INT, name STRING, value INT ) USING iceberg ")
  ```
+ Mengkueri Tabel

  ```
  spark.sql(" SELECT * FROM {{s3tablesbucket}}.{{my_namespace}}.`{{my_table}}` ").show()
  ```
+ Menyisipkan data ke dalam tabel

  ```
  spark.sql(
  """
      INSERT INTO {{s3tablesbucket}}.{{my_namespace}}.{{my_table}} 
      VALUES 
          (1, 'ABC', 100), 
          (2, 'XYZ', 200)
  """)
  ```
+ Muat file data yang ada ke dalam tabel

  1. Baca data ke Spark.

     ```
     val data_file_location = "Path such as S3 URI to data file"
     val data_file = spark.read.parquet({{data_file_location}})
     ```

  1. Tulis data ke dalam tabel Iceberg.

     ```
     data_file.writeTo("{{s3tablesbucket}}.{{my_namespace}}.{{my_table}}").using("Iceberg").tableProperty ("format-version", "2").createOrReplace()
     ```