Iceberg REST カタログで BigLake メタストアを使用する

BigLake Metastore のマネージド Apache Iceberg REST カタログは、すべての Iceberg データの単一の信頼できる情報源を提供することで、すべてのクエリ エンジン間の相互運用性を実現します。これにより、Apache Spark などのクエリエンジンは、Iceberg テーブルを検出してメタデータを読み取り、一貫した方法で管理できます。

Iceberg REST カタログで使用する Iceberg テーブルは、Apache Iceberg 用 BigLake テーブル(プレビュー)と呼ばれます。これらは、オープンソース エンジンから作成して Cloud Storage に保存する Iceberg テーブルです。オープンソース エンジンまたは BigQuery で読み取ることができます。書き込みはオープンソース エンジンからのみサポートされます。このドキュメントでは、これらのテーブルを BigLake Iceberg テーブルと呼びます。

始める前に

  1. Make sure that billing is enabled for your Google Cloud project.

    詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
  2. Enable the BigLake API.

    Enable the API

  3. 省略可: BigLake metastore の仕組みと使用すべき理由を理解します。

必要なロール

BigLake メタストアで Iceberg REST カタログを使用するために必要な権限を取得するには、プロジェクトまたはサービス アカウントに対する次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

制限事項

Iceberg REST カタログには次の制限があります。

Iceberg REST カタログを使用してクエリエンジンを構成する

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

次のように置き換えます。

  • CATALOG_NAME: Iceberg REST カタログの名前。
  • APP_NAME: Spark セッションの名前。
  • STORAGE_URI: BigLake Iceberg テーブルを含む Cloud Storage バケットの URI。
  • TOKEN: 1 時間有効な認証トークン(例: gcloud auth application-default print-access-token)。
  • PROJECT_ID: Iceberg REST カタログの使用に対して課金されるプロジェクト。これは、Cloud Storage バケットを所有するプロジェクトとは異なる場合があります。REST API を使用する場合のプロジェクト構成の詳細については、システム パラメータをご覧ください。

名前空間の作成

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

spark.sql("USE NAMESPACE_NAME;")

NAMESPACE_NAME は、Namespace の名前に置き換えます。

テーブルを作成する

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

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

次のように置き換えます。

  • NAMESPACE_NAME: Namespace の名前。
  • TABLE_NAME: テーブルの名前

テーブルのリスト表示

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

テーブルにデータを挿入する

次の例では、サンプルデータをテーブルに挿入します。

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

テーブルに対してクエリを実行する

次の例では、テーブルからすべてのデータを選択します。

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

テーブル スキーマを変更する

次の例では、テーブルに列を追加します。

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

テーブルを削除する

次の例では、指定された名前空間からテーブルを削除します。

spark.sql("DROP TABLE TABLE_NAME;")

料金

料金の詳細については、BigLake の料金をご覧ください。

次のステップ