Menggunakan metastore BigLake dengan katalog REST Iceberg

Katalog REST Apache Iceberg terkelola di metastore BigLake menciptakan interoperabilitas 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. Make sure that billing is enabled for your Google Cloud project.

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

    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 cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Batasan

Katalog REST Iceberg tunduk pada batasan berikut:

Mengonfigurasi mesin kueri dengan katalog REST Iceberg

import google.auth
from google.auth.transport.requests import Request
from google.oauth2 import service_account
import pyspark
from pyspark.context import SparkContext
from pyspark.sql import SparkSession

catalog_name = "CATALOG_NAME"
spark = SparkSession.builder.appName("APP_NAME") \
    .config("spark.sql.defaultCatalog", catalog_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}.token", "TOKEN") \
    .config(f"spark.sql.catalog.{catalog_name}.oauth2-server-uri", "https://oauth2.googleapis.com/token") \
    .config(f"spark.sql.catalog.{catalog_name}.header.x-goog-user-project", "PROJECT_ID") \
    .config("spark.sql.extensions","org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
    .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") \
    .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.
  • TOKEN: token autentikasi Anda, yang valid selama satu jam, misalnya, gcloud auth application-default print-access-token.
  • 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.

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()

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