Iceberg REST カタログで BigLake メタストアを使用する
BigLake Metastore のマネージド Apache Iceberg REST カタログは、すべての Iceberg データの単一の信頼できる情報源を提供することで、すべてのクエリ エンジン間の相互運用性を実現します。これにより、Apache Spark などのクエリエンジンは、Iceberg テーブルを検出してメタデータを読み取り、一貫した方法で管理できます。
Iceberg REST カタログで使用する Iceberg テーブルは、Apache Iceberg 用 BigLake テーブル(プレビュー)と呼ばれます。これらは、オープンソース エンジンから作成して Cloud Storage に保存する Iceberg テーブルです。オープンソース エンジンまたは BigQuery で読み取ることができます。書き込みはオープンソース エンジンからのみサポートされます。このドキュメントでは、これらのテーブルを BigLake Iceberg テーブルと呼びます。
始める前に
-
Make sure that billing is enabled for your Google Cloud project.
詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。 -
Enable the BigLake API.
- 省略可: BigLake metastore の仕組みと使用すべき理由を理解します。
必要なロール
BigLake メタストアで Iceberg REST カタログを使用するために必要な権限を取得するには、プロジェクトまたはサービス アカウントに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
BigLake 管理者 (
roles/biglake.admin
) -
ストレージ管理者(
roles/storage.admin
)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
制限事項
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 の料金をご覧ください。
次のステップ
- 詳細については、BigLake Metastore を使用して Iceberg リソースを管理するをご覧ください。
- BigLake metastore の追加機能について学習する。