Menggunakan metastore BigLake dengan katalog REST Iceberg

Katalog REST Apache Iceberg terkelola di metastore BigLake menciptakan interoperabilitas di antara semua mesin kueri Anda dengan menawarkan satu sumber tepercaya untuk semua data Iceberg Anda. Dengan demikian, mesin kueri, seperti Apache Spark, dapat menemukan, membaca metadata dari, dan mengelola tabel Iceberg secara konsisten.

Tabel Iceberg yang Anda gunakan dengan katalog REST Iceberg disebut tabel BigLake untuk Apache Iceberg (pratinjau). Ini adalah tabel Iceberg yang Anda buat dari mesin open source dan disimpan di Cloud Storage. Tabel ini dapat dibaca oleh mesin open source atau BigQuery. Penulisan hanya didukung dari mesin open source. Dalam dokumen ini, kita menyebut tabel ini sebagai tabel BigLake Iceberg.

Sebelum memulai

  1. Verify that billing is enabled for your Google Cloud project.

    Pelajari cara memeriksa apakah penagihan telah diaktifkan pada suatu project.
  2. Enable the BigLake API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  3. Opsional: Pahami cara kerja metastore BigLake dan alasan Anda harus menggunakannya.

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan untuk menggunakan katalog REST Iceberg di metastore BigLake, minta administrator Anda untuk memberi Anda peran IAM berikut di project atau akun layanan Anda:

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran kustom atau peran yang telah ditentukan lainnya.

Batasan

Katalog REST Iceberg tunduk pada batasan berikut:

Mengonfigurasi mesin kueri dengan katalog REST Iceberg

Iceberg 1.10 atau yang lebih baru

Iceberg 1.10 dan rilis berikutnya memiliki dukungan bawaan untuk alur otorisasi Google di GoogleAuthManager. Dataproc Spark juga mendukung GoogleAuthManager dalam rilis berikut:

  • Versi runtime Dataproc di Compute Engine 2.2 2.2.65 dan yang lebih baru
  • Image Dataproc Serverless untuk Spark 2.2 2.2.60 dan yang lebih baru
  • Versi runtime Dataproc di Compute Engine 2.3 2.3.11 dan yang lebih baru
  • Image Dataproc Serverless untuk Spark 2.3 2.3.10 dan yang lebih baru
import pyspark
from pyspark.context import SparkContext
from pyspark.sql import SparkSession

catalog_name = "CATALOG_NAME"
spark = SparkSession.builder.appName("APP_NAME") \
  .config(f'spark.sql.catalog.{catalog_name}', 'org.apache.iceberg.spark.SparkCatalog') \
  .config(f'spark.sql.catalog.{catalog_name}.type', 'rest') \
  .config(f'spark.sql.catalog.{catalog_name}.uri', 'https://biglake.googleapis.com/iceberg/v1beta/restcatalog') \
  .config(f'spark.sql.catalog.{catalog_name}.warehouse', 'gs://STORAGE_URI') \
  .config(f'spark.sql.catalog.{catalog_name}.header.x-goog-user-project', 'PROJECT_ID') \
  .config(f'spark.sql.catalog.{catalog_name}.rest.auth.type', 'org.apache.iceberg.gcp.auth.GoogleAuthManager') \
  .config(f'spark.sql.catalog.{catalog_name}.io-impl', 'org.apache.iceberg.hadoop.HadoopFileIO') \
  .config(f'spark.sql.catalog.{catalog_name}.rest-metrics-reporting-enabled', 'false') \
  .config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \
  .config('spark.sql.defaultCatalog', 'CATALOG_NAME') \
  .getOrCreate()

Ganti kode berikut:

  • CATALOG_NAME: nama untuk katalog REST Iceberg Anda.
  • APP_NAME: nama untuk sesi Spark Anda.
  • STORAGE_URI: URI bucket Cloud Storage yang berisi tabel Iceberg BigLake Anda.
  • PROJECT_ID: project yang ditagih untuk penggunaan katalog REST Iceberg, yang mungkin berbeda dengan project yang memiliki bucket Cloud Storage. Untuk mengetahui detail tentang konfigurasi project saat menggunakan REST API, lihat Parameter sistem.

Rilis Iceberg sebelumnya

Untuk rilis Iceberg sebelum 1.10 yang tidak disertakan dalam image Dataproc, Anda dapat mengonfigurasi autentikasi OAuth standar dengan mengonfigurasi sesi menggunakan kode berikut:

import pyspark
from pyspark.context import SparkContext
from pyspark.sql import SparkSession

catalog_name = "CATALOG_NAME"
spark = SparkSession.builder.appName("APP_NAME") \
  .config(f'spark.sql.catalog.{catalog_name}', 'org.apache.iceberg.spark.SparkCatalog') \
  .config(f'spark.sql.catalog.{catalog_name}.type', 'rest') \
  .config(f'spark.sql.catalog.{catalog_name}.uri', 'https://biglake.googleapis.com/iceberg/v1beta/restcatalog') \
  .config(f'spark.sql.catalog.{catalog_name}.warehouse', 'gs://STORAGE_URI') \
  .config(f'spark.sql.catalog.{catalog_name}.header.x-goog-user-project', 'PROJECT_ID') \
  .config(f"spark.sql.catalog.{catalog_name}.token", "TOKEN") \
  .config(f"spark.sql.catalog.{catalog_name}.oauth2-server-uri", "https://oauth2.googleapis.com/token") \
  .config(f'spark.sql.catalog.{catalog_name}.io-impl', 'org.apache.iceberg.hadoop.HadoopFileIO') \
  .config(f'spark.sql.catalog.{catalog_name}.rest-metrics-reporting-enabled', 'false') \
  .config('spark.sql.extensions', 'org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions') \
  .config('spark.sql.defaultCatalog', 'CATALOG_NAME') \
  .getOrCreate()

Ganti kode berikut:

  • CATALOG_NAME: nama untuk katalog REST Iceberg Anda.
  • APP_NAME: nama untuk sesi Spark Anda.
  • STORAGE_URI: URI bucket Cloud Storage yang berisi tabel Iceberg BigLake Anda.
  • PROJECT_ID: project yang ditagih untuk penggunaan katalog REST Iceberg, yang mungkin berbeda dengan project yang memiliki bucket Cloud Storage. Untuk mengetahui detail tentang konfigurasi project saat menggunakan REST API, lihat Parameter sistem.
  • TOKEN: token autentikasi Anda, yang valid selama satu jam—misalnya, token yang dibuat menggunakan gcloud auth application-default print-access-token.

Buat namespace

spark.sql("CREATE NAMESPACE IF NOT EXISTS NAMESPACE_NAME;")

spark.sql("USE NAMESPACE_NAME;")

Ganti NAMESPACE_NAME dengan nama untuk namespace Anda.

Membuat tabel

spark.sql("CREATE TABLE TABLE_NAME (id int, data string) USING ICEBERG;")

spark.sql("DESCRIBE NAMESPACE_NAME.TABLE_NAME").show()

Ganti kode berikut:

  • NAMESPACE_NAME: nama namespace Anda
  • TABLE_NAME: nama untuk tabel Anda

Membuat daftar tabel

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

Menyisipkan data ke dalam tabel

Contoh berikut menyisipkan data sampel ke dalam tabel:

spark.sql("INSERT INTO TABLE_NAME VALUES (1, \"first row\"), (2, \"second row\"), (3, \"third row\");")

Membuat kueri tabel

Contoh berikut memilih semua data dari tabel:

spark.sql("SELECT * FROM TABLE_NAME;").show()

Contoh berikut membuat kueri tabel yang sama dari BigQuery:

SELECT * FROM `CLOUD_STORAGE_BUCKET_NAME>NAMESPACE_NAME.TABLE_NAME`;

Ganti CLOUD_STORAGE_BUCKET_NAME dengan nama bucket Cloud Storage untuk katalog REST Iceberg Anda. Misalnya, jika URI Anda adalah gs://iceberg_bucket, gunakan iceberg_bucket.

Mengubah skema tabel

Contoh berikut menambahkan kolom ke tabel:

spark.sql("ALTER TABLE TABLE_NAME ADD COLUMNS ( desc string);")
spark.sql("DESCRIBE NAMESPACE_NAME.TABLE_NAME").show()

Menghapus tabel

Contoh berikut menghapus tabel dari namespace tertentu:

spark.sql("DROP TABLE TABLE_NAME;")

Harga

Untuk mengetahui detail harga, lihat Harga BigLake.

Langkah berikutnya