Iceberg REST カタログで BigLake metastore を使用する
BigLake Metastore のマネージド Apache Iceberg REST カタログは、すべての Iceberg データに関して単一の信頼できる情報源を提供することで、すべてのクエリエンジン間の相互運用性を実現します。これにより、Apache Spark などのクエリエンジンは、Iceberg テーブルを検出してメタデータを読み取り、一貫した方法で管理できます。
Iceberg REST カタログで使用する Iceberg テーブルは、Apache Iceberg 用 BigLake テーブル(プレビュー)と呼ばれます。これらは、オープンソース エンジンから作成して Cloud Storage に保存する Iceberg テーブルです。これは、オープンソース エンジンまたは BigQuery で読み取ることができます。書き込みはオープンソース エンジンからのみサポートされます。このドキュメントでは、これらのテーブルを BigLake Iceberg テーブルと呼びます。
始める前に
-
Verify that billing is enabled for your Trusted Cloud project.
詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。 -
Enable the BigLake API.
- 省略可: BigLake metastore の仕組みと使用すべき理由を理解します。
必要なロール
BigLake metastore で Iceberg REST カタログを使用するために必要な権限を取得するには、プロジェクトまたはサービス アカウントに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
BigLake 管理者(
roles/biglake.admin
) - ストレージ管理者(
roles/storage.admin
)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
制限事項
Iceberg REST カタログには次の制限があります。
- マルチリージョン バケット、デュアルリージョン バケット、カスタム リージョンに配置されたバケットはサポートされていません。
Iceberg REST カタログを使用してクエリエンジンを構成する
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') \ .getOrCreate()
次のように置き換えます。
CATALOG_NAME
: Iceberg REST カタログの名前。APP_NAME
: Spark セッションの名前。STORAGE_URI
: BigLake Iceberg テーブルを含む Cloud Storage バケットの URI。PROJECT_ID
: Iceberg REST カタログの使用に対して課金されるプロジェクト。Cloud Storage バケットを所有するプロジェクトとは異なる場合があります。REST API を使用する場合のプロジェクト構成の詳細については、システム パラメータをご覧ください。
名前空間を作成する
spark.sql("CREATE NAMESPACE IF NOT EXISTS NAMESPACE_NAME;") spark.sql("USE NAMESPACE_NAME;")
NAMESPACE_NAME
は、名前空間の名前に置き換えます。
テーブルを作成する
spark.sql("CREATE TABLE TABLE_NAME (id int, data string) USING ICEBERG;") spark.sql("DESCRIBE NAMESPACE_NAME.TABLE_NAME").show()
次のように置き換えます。
NAMESPACE_NAME
: 名前空間の名前。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()
次の例では、BigQuery から同じテーブルをクエリします。
SELECT * FROM `CLOUD_STORAGE_BUCKET_NAME>NAMESPACE_NAME.TABLE_NAME`;
CLOUD_STORAGE_BUCKET_NAME
は、Iceberg REST カタログの Cloud Storage バケットの名前に置き換えます。たとえば、URI が gs://iceberg_bucket
の場合は、iceberg_bucket
を使用します。
テーブル スキーマを変更する
次の例では、テーブルに列を追加します。
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 の追加機能について確認する。