Spark、BigQuery、Iceberg REST カタログで Lakehouse ランタイム カタログを使用する
Cloud Storage バケットを使用して Lakehouse ランタイム カタログを作成し、Lakehouse for Apache Iceberg を使用する方法を学習します。この構成により、オープンソース処理エンジンとGoogle Cloudを接続するマネージド メタデータ レイヤが確立されます。
次に、Managed Service for Apache Spark PySpark ジョブを実行して、Apache Iceberg REST カタログ エンドポイントを使用して Lakehouse Iceberg REST カタログ テーブルを作成します。
その後、BigQuery の Google Cloud コンソールから project.catalog.namespace.table 構文を使用して、結果のテーブルを直接クエリできます。
始める前に
- Google Cloud アカウントにログインします。 Google Cloudを初めて使用する場合は、 アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the BigLake, Dataproc APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the BigLake, Dataproc APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
IAM ロールを付与する
Managed Service for Apache Spark PySpark ジョブと Lakehouse ランタイム カタログが Cloud Storage と BigQuery を操作できるようにするには、対応するプリンシパルに必要なロールを付与します。
Google Cloud コンソールで、[Cloud Shell をアクティブにする] をクリックします。
[承認] をクリックします。
Dataproc ワーカー ロールを、プロジェクトの Compute Engine のデフォルトのサービス アカウントに付与します。Managed Service for Apache Spark は、デフォルトでこのアカウントを使用します。詳細については、Managed Service for Apache Spark サービス アカウントをご覧ください。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')-compute@developer.gserviceaccount.com" \ --role="roles/dataproc.worker"プロジェクトの Compute Engine デフォルト サービス アカウントに Service Usage ロールを付与します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')-compute@developer.gserviceaccount.com" \ --role="roles/serviceusage.serviceUsageConsumer"プロジェクトの Compute Engine のデフォルトのサービス アカウントに BigLake 編集者ロールを付与します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')-compute@developer.gserviceaccount.com" \ --role="roles/biglake.editor"プロジェクトの Compute Engine のデフォルトのサービス アカウントに BigQuery データ編集者ロールを付与します。
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')-compute@developer.gserviceaccount.com" \ --role="roles/bigquery.dataEditor"次のように置き換えます。
PROJECT_ID: 実際の Google Cloud プロジェクト ID
Lakehouse ランタイム カタログを作成する
Iceberg テーブルのメタデータを管理する Lakehouse ランタイム カタログを作成します。このカタログには PySpark ジョブで接続します。
Google Cloud コンソールで、[Lakehouse] に移動します。
[ カタログを作成] をクリックします。
[カタログの作成] ページが開きます。
[Cloud Storage バケットを選択] で、[参照] をクリックし、[新しいバケットを作成] をクリックします。
バケットの一意の名前を入力します。
重要
バケット名を覚えておいてください。また、Lakehouse カタログ名としても自動的に使用されます。変更することはできません。このチュートリアルの後半で使用するために、名前を変数に保存する場合は、ここで名前を追加できます。
バケットがマルチリージョン(
us、euなど)にある場合は、us-east1やeurope-west4など、同じ地理的ロケーションにあるリージョンを使用します。リージョンをこの変数に保存して、後で使用できます。LAKEHOUSE_CATALOG_ID
バケットを作成するリージョンをメモしておきます。このチュートリアルで後ほど
dataproc batches submit pysparkコマンドを使用して PySpark ジョブを実行する際には、同じリージョンを使用する必要があります。マルチリージョン(us、euなど)にバケットを作成する場合は、us-east1やeurope-west4など、同じ地理的位置にあるリージョンを使用する必要があります。このチュートリアルの後半で使用するために、変数の名前を保存する場合は、ここで名前を追加できます。REGION
バケット リストからバケットを選択し、[選択] をクリックします。
[認証方法] で、[認証情報ベンダーモード] を選択します。
[作成] をクリックします。
カタログが作成され、[カタログの詳細] ページが開きます。
[認証方法] で、[バケットの権限を設定] をクリックします。
ダイアログで [確認] をクリックします。
これにより、カタログのサービス アカウントにストレージ バケットに対するストレージ オブジェクト ユーザーのロールがあることが確認されます。
PySpark ジョブを作成して実行する
Iceberg テーブルを作成してクエリするには、まず必要な Spark SQL ステートメントを使用して PySpark ジョブを作成します。次に、Managed Service for Apache Spark でジョブを実行します。
Namespace とテーブルを含む PySpark スクリプトを作成する
テキスト エディタで、次の内容の quickstart.py という名前のファイルを作成します。
この PySpark スクリプトは、Iceberg カタログでいくつかのオペレーションを実行するために Spark セッションを初期化します。スクリプトは、まず Namespace が存在しない場合は Namespace を作成します。次に、基本的なスキーマを使用して quickstart_table という名前の Iceberg テーブルを作成します。テーブルが作成されると、スクリプトは 3 行のデータを挿入します。最後に、テーブルにクエリを実行して、挿入されたすべてのレコードを取得します。
これらの値は、次のステップで gcloud dataproc
batches submit pyspark ジョブを実行するときに使用されます。
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("quickstart").getOrCreate()
# Create a namespace (dataset) if it doesn't exist
spark.sql("CREATE NAMESPACE IF NOT EXISTS `quickstart_catalog`.quickstart_namespace")
# Create the table
spark.sql("""
CREATE OR REPLACE TABLE `quickstart_catalog`.quickstart_namespace.quickstart_table (
id INT,
name STRING
)
USING iceberg
""")
# Insert data into the table
spark.sql("""
INSERT INTO `quickstart_catalog`.quickstart_namespace.quickstart_table
VALUES (1, 'one'), (2, 'two'), (3, 'three')
""")
スクリプトを Cloud Storage バケットにアップロードする
quickstart.py スクリプトを作成したら、Cloud Storage バケットにアップロードします。
Google Cloud コンソールで、Cloud Storage バケットに移動します。
バケットの名前をクリックします。
[オブジェクト] タブで、[アップロード] > [ファイルをアップロード] をクリックします。
ファイル ブラウザで
quickstart.pyファイルを選択し、[開く] をクリックします。
PySpark ジョブを実行する
quickstart.py スクリプトをアップロードしたら、Managed Service for Apache Spark バッチジョブとして実行します。
Cloud Shell で、
quickstart.pyスクリプトを使用して次の Managed Service for Apache Spark バッチジョブを実行します。gcloud dataproc batches submit pyspark gs://LAKEHOUSE_CATALOG_ID/quickstart.py \ --project=PROJECT_ID \ --region=REGION \ --version=2.2 \ --properties="\ spark.sql.defaultCatalog=quickstart_catalog,\ spark.sql.catalog.quickstart_catalog=org.apache.iceberg.spark.SparkCatalog,\ spark.sql.catalog.quickstart_catalog.type=rest,\ spark.sql.catalog.quickstart_catalog.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog,\ spark.sql.catalog.quickstart_catalog.warehouse=gs://LAKEHOUSE_CATALOG_ID,\ spark.sql.catalog.quickstart_catalog.io-impl=org.apache.iceberg.gcp.gcs.GCSFileIO,\ spark.sql.catalog.quickstart_catalog.header.x-goog-user-project=PROJECT_ID,\ spark.sql.catalog.quickstart_catalog.rest.auth.type=org.apache.iceberg.gcp.auth.GoogleAuthManager,\ spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,\ spark.sql.catalog.quickstart_catalog.header.X-Iceberg-Access-Delegation=vended-credentials,\ spark.sql.catalog.quickstart_catalog.gcs.oauth2.refresh-credentials-endpoint=https://oauth2.googleapis.com/token"
次のように置き換えます。
LAKEHOUSE_CATALOG_ID: PySpark アプリケーション ファイルを含む Cloud Storage バケットの名前。重要:
この識別子はカタログの名前でもあります。たとえば、カタログを保存するためにバケットを作成し、そのバケットに
iceberg-bucketという名前を付けた場合、カタログ名とバケット名の両方がiceberg-bucketになります。この名前は、後で BigQuery でカタログをクエリするときに P.C.N.T 構文を使用して使用されます。例:my-project.biglake-catalog-id-name.quickstart_namespace.quickstart_table。PROJECT_ID: 実際の Google Cloud プロジェクト ID。REGION: Managed Service for Apache Spark バッチ ワークロードを実行するリージョン。
ジョブが完了すると、次のような出力が表示されます。
Batch [cb9d84e9489d408baca4f9e7ab4c64ff] finished. metadata: '@type': type.googleapis.com/google.cloud.dataproc.v1.BatchOperationMetadata batch: projects/your-project/locations/us-central1/batches/cb9d84e9489d408baca4f9e7ab4c64ff batchUuid: 54b0b9d2-f0a1-4fdf-ae44-eead3f8e60e9 createTime: '2026-01-24T00:10:50.224097Z' description: Batch labels: goog-dataproc-batch-id: cb9d84e9489d408baca4f9e7ab4c64ff goog-dataproc-batch-uuid: 54b0b9d2-f0a1-4fdf-ae44-eead3f8e60e9 goog-dataproc-drz-resource-uuid: batch-54b0b9d2-f0a1-4fdf-ae44-eead3f8e60e9 goog-dataproc-location: us-central1 operationType: BATCH name: projects/your-project/regions/us-central1/operations/32287926-5f61-3572-b54a-fbad8940d6ef
BigQuery からテーブルに対してクエリを実行する
Google Cloud コンソールで、[BigQuery] に移動します。
クエリエディタで次のステートメントを入力します。このクエリでは
project.catalog.namespace.table構文を使用します。SELECT * FROM `PROJECT_ID.LAKEHOUSE_CATALOG_ID.quickstart_namespace.quickstart_table`;次のように置き換えます。
PROJECT_ID: 実際の Google Cloud プロジェクト ID。LAKEHOUSE_CATALOG_ID: BigQuery クエリで使用するカタログ ID。重要
この識別子は、Cloud Storage バケットの名前でもあります。
たとえば、カタログを保存するためにバケットを作成し、そのバケットに
iceberg-bucketという名前を付けた場合、カタログ名とバケット名の両方がiceberg-bucketになります。これは、後で BigQuery でカタログをクエリするときに、P.C.N.T 構文を使用して使用されます。例:my-project.biglake-catalog-id-name.quickstart_namespace.quickstart_table。
[実行] をクリックします。
クエリ結果には、PySpark ジョブで挿入したデータが表示されます。
クリーンアップ
このページで使用したリソースについて、 Google Cloud アカウントに課金されないようにするには、次の手順を実施します。
quickstart.pyを更新して、Namespace(データセット)とテーブルを削除します。from pyspark.sql import SparkSession spark = SparkSession.builder.appName("quickstart").getOrCreate() # Delete the table first, then the namespace (dataset) spark.sql("DROP TABLE `quickstart_catalog`.quickstart_namespace.quickstart_table") spark.sql("DROP NAMESPACE `quickstart_catalog`.quickstart_namespace")Cloud Storage バケットにアップロードします。
Google Cloud コンソールで、Cloud Storage バケットに移動します。
バケットの名前をクリックします。
[オブジェクト] タブで、[アップロード] > [ファイルをアップロード] をクリックします。
ファイル ブラウザで
quickstart.pyファイルを選択し、[開く] をクリックします。
Cloud Shell で、更新された
quickstart.pyスクリプトを使用して別の Managed Service for Apache Spark バッチジョブを実行します。gcloud dataproc batches submit pyspark gs://LAKEHOUSE_CATALOG_ID/quickstart.py \ --project=PROJECT_ID \ --region=REGION \ --version=2.2 \ --properties="\ spark.sql.defaultCatalog=quickstart_catalog,\ spark.sql.catalog.quickstart_catalog=org.apache.iceberg.spark.SparkCatalog,\ spark.sql.catalog.quickstart_catalog.type=rest,\ spark.sql.catalog.quickstart_catalog.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog,\ spark.sql.catalog.quickstart_catalog.warehouse=gs://LAKEHOUSE_CATALOG_ID,\ spark.sql.catalog.quickstart_catalog.io-impl=org.apache.iceberg.gcp.gcs.GCSFileIO,\ spark.sql.catalog.quickstart_catalog.header.x-goog-user-project=PROJECT_ID,\ spark.sql.catalog.quickstart_catalog.rest.auth.type=org.apache.iceberg.gcp.auth.GoogleAuthManager,\ spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,\ spark.sql.catalog.quickstart_catalog.header.X-Iceberg-Access-Delegation=vended-credentials,\ spark.sql.catalog.quickstart_catalog.gcs.oauth2.refresh-credentials-endpoint=https://oauth2.googleapis.com/token"
次のように置き換えます。
LAKEHOUSE_CATALOG_ID: PySpark アプリケーション ファイルを含む Cloud Storage バケットの名前。
重要:
この識別子はカタログの名前でもあります。たとえば、カタログを保存するためにバケットを作成し、そのバケットに
iceberg-bucketという名前を付けた場合、カタログ名とバケット名はどちらもiceberg-bucketになります。この名前は、後で BigQuery でカタログをクエリするときに P.C.N.T 構文を使用して使用されます。(例:my-project.biglake-catalog-id-name.quickstart_namespace.quickstart_table)。PROJECT_ID: 実際の Google Cloud プロジェクト ID。REGION: Managed Service for Apache Spark バッチ ワークロードを実行するリージョン。
[Lakehouse] に移動します。
LAKEHOUSE_CATALOG_ID カタログを選択して、[削除] をクリックします。
[Cloud Storage バケット] に移動します。
バケットを選択して [削除] をクリックします。
次のステップ
- Lakehouse カタログを管理する方法を学習する。
- Lakehouse ランタイム カタログでサポートされている Apache Iceberg テーブルについて学習する。