このドキュメントでは、Dataproc Serverless for Spark SQL と PySpark バッチ ワークロードを実行して、BigQuery Metastore にメタデータを保存する Apache Iceberg テーブルを作成する方法について説明します。Spark コードを実行する他の方法については、BigQuery ノートブックで PySpark コードを実行すると Apache Spark ワークロードを実行するをご覧ください。
始める前に
まだ作成していない場合は、 Google Cloud プロジェクトと Cloud Storage バケットを作成します。
プロジェクトを設定する
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Dataproc, BigQuery, and Cloud Storage APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the Dataproc, BigQuery, and Cloud Storage APIs.
プロジェクトに Cloud Storage バケットを作成します。
- In the Google Cloud console, go to the Cloud Storage Buckets page.
- Click Create bucket.
- On the Create a bucket page, enter your bucket information. To go to the next
step, click Continue.
- For Name your bucket, enter a name that meets the bucket naming requirements.
-
For Choose where to store your data, do the following:
- Select a Location type option.
- Select a Location option.
- For Choose a default storage class for your data, select a storage class.
- For Choose how to control access to objects, select an Access control option.
- For Advanced settings (optional), specify an encryption method, a retention policy, or bucket labels.
- Click Create.
Compute Engine のデフォルトのサービス アカウント
PROJECT_NUMBER-compute@developer.gserviceaccount.com
に BigQuery データ編集者(roles/bigquery.dataEditor
)ロールを付与します。手順については、単一ロールの付与をご覧ください。Google Cloud CLI の例:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role roles/bigquery.dataEditor
注:
- PROJECT_ID と PROJECT_NUMBER は、 Google Cloud コンソールのダッシュボードの [プロジェクト情報] セクションに表示されます。
Dataproc Serverless バッチ ワークロードを実行するリージョン VPC サブネットで、限定公開の Google アクセスが有効になっていることを確認します。詳細については、Iceberg テーブルを作成するをご覧ください。
OSS リソースと BigQuery リソースのマッピング
オープンソース リソースと BigQuery リソースの用語の対応は次のとおりです。
OSS リソース | BigQuery リソース |
---|---|
Namespace、Database | データセット |
パーティション分割テーブルまたはパーティション分割なしのテーブル | テーブル |
ビュー | 表示 |
Iceberg テーブルを作成する
このセクションでは、Dataproc Serverless Spark SQL と PySpark バッチ ワークロードを使用して、BigQuery Metastore にメタデータを含む Iceberg テーブルを作成する方法について説明します。
Spark SQL
Spark SQL ワークロードを実行して Iceberg テーブルを作成する
次の手順では、Dataproc Serverless Spark SQL バッチ ワークロードを実行して、BigQuery Metastore にテーブル メタデータを保存する Iceberg テーブルを作成する方法を示します。
ローカルまたは Cloud Shell で次の Spark SQL コマンドを
iceberg-table.sql
ファイルにコピーします。USE CATALOG_NAME; CREATE NAMESPACE IF NOT EXISTS example_namespace; DROP TABLE IF EXISTS example_table; CREATE TABLE example_table (id int, data string) USING ICEBERG LOCATION 'gs://BUCKET/WAREHOUSE_FOLDER'; INSERT INTO example_table VALUES (1, 'first row'); ALTER TABLE example_table ADD COLUMNS (newDoubleCol double); DESCRIBE TABLE example_table;
次のように置き換えます。
- CATALOG_NAME: Iceberg カタログ名。
- BUCKET と WAREHOUSE_FOLDER: Iceberg ウェアハウス ディレクトリとして使用される Cloud Storage バケットとフォルダ。
iceberg-table.sql
を含むディレクトリからローカルまたは Cloud Shell で次のコマンドを実行して、Spark SQL ワークロードを送信します。gcloud dataproc batches submit spark-sql iceberg-table.sql \ --project=PROJECT_ID \ --region=REGION \ --deps-bucket=BUCKET_NAME \ --version=2.2 \ --subnet=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \ --properties="spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,spark.sql.catalog.CATALOG_NAME.catalog-impl=org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog,spark.sql.catalog.CATALOG_NAME.gcp_project=PROJECT_ID,spark.sql.catalog.CATALOG_NAME.gcp_location=LOCATION,spark.sql.catalog.CATALOG_NAME.warehouse=gs://BUCKET/WAREHOUSE_FOLDER"
注:
- PROJECT_ID: Google Cloud プロジェクト ID。プロジェクト ID は、 Google Cloud コンソールのダッシュボードの [プロジェクト情報] セクションに表示されます。
- REGION: ワークロードを実行できる使用可能な Compute Engine リージョン。
- BUCKET_NAME: Cloud Storage バケットの名前。Spark は、バッチ ワークロードを実行する前に、ワークロードの依存関係をこのバケットの
/dependencies
フォルダにアップロードします。WAREHOUSE_FOLDER はこのバケットにあります。 - SUBNET_NAME: 限定公開の Google アクセスが有効で、他のセッション サブネットの要件を満たしている
REGION
の VPC サブネットの名前。 - LOCATION: サポートされている BigQuery のロケーション。デフォルトのロケーションは「US」です。
--version
: Dataproc Serverless ランタイム バージョン 2.2 以降。--properties
カタログのプロパティ。
BigQuery でテーブルのメタデータを表示する
Google Cloud コンソールで、[BigQuery] ページに移動します。
Iceberg テーブルのメタデータを表示します。
PySpark
次の手順では、Dataproc サーバーレス PySpark バッチ ワークロードを実行して、BigQuery Metastore にテーブル メタデータを保存する Iceberg テーブルを作成する方法を示します。
- 次の PySpark コードをローカルまたは Cloud Shell で
iceberg-table.py
ファイルにコピーします。catalog = "CATALOG_NAME" namespace = "NAMESPACE" spark.sql(f"USE `{catalog}`;") spark.sql(f"CREATE NAMESPACE IF NOT EXISTS `{namespace}`;") spark.sql(f"USE `{namespace}`;") # Create table and display schema spark.sql("DROP TABLE IF EXISTS example_iceberg_table") spark.sql("CREATE TABLE example_iceberg_table (id int, data string) USING ICEBERG") spark.sql("DESCRIBE example_iceberg_table;") # Insert table data. spark.sql("INSERT INTO example_iceberg_table VALUES (1, 'first row');") # Alter table, then display schema. spark.sql("ALTER TABLE example_iceberg_table ADD COLUMNS (newDoubleCol double);") spark.sql("DESCRIBE example_iceberg_table;")
次のように置き換えます。
- CATALOG_NAME と NAMESPACE: Iceberg カタログ名と Namespace を組み合わせて、Iceberg テーブル(
catalog.namespace.table_name
)を識別します。
- CATALOG_NAME と NAMESPACE: Iceberg カタログ名と Namespace を組み合わせて、Iceberg テーブル(
-
iceberg-table.py
を含むディレクトリからローカルまたは Cloud Shell で次のコマンドを実行して、PySpark ワークロードを送信します。gcloud dataproc batches submit pyspark iceberg-table.py \ --project=PROJECT_ID \ --region=REGION \ --deps-bucket=BUCKET_NAME \ --version=2.2 \ --subnet=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \ --properties="spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,spark.sql.catalog.CATALOG_NAME.catalog-impl=org.apache.iceberg.gcp.bigquery.BigQueryMetastoreCatalog,spark.sql.catalog.CATALOG_NAME.gcp_project=PROJECT_ID,spark.sql.catalog.CATALOG_NAME.gcp_location=LOCATION,spark.sql.catalog.CATALOG_NAME.warehouse=gs://BUCKET/WAREHOUSE_FOLDER"
注:
- PROJECT_ID: Google Cloud プロジェクト ID。プロジェクト ID は、 Google Cloud コンソールのダッシュボードの [プロジェクト情報] セクションに表示されます。
- REGION: ワークロードを実行できる利用可能な Compute Engine リージョン。
- BUCKET_NAME: Cloud Storage バケットの名前。Spark は、バッチ ワークロードを実行する前に、ワークロードの依存関係をこのバケットの
/dependencies
フォルダにアップロードします。 - SUBNET_NAME: 限定公開の Google アクセスが有効で、他のセッション サブネットの要件を満たしている
REGION
の VPC サブネットの名前。 --version
: Dataproc Serverless ランタイム バージョン 2.2 以降。- LOCATION: サポートされている BigQuery のロケーション。デフォルトのロケーションは「US」です。
- BUCKET と WAREHOUSE_FOLDER: Iceberg ウェアハウス ディレクトリとして使用される Cloud Storage バケットとフォルダ。
--properties
: カタログのプロパティ。
- BigQuery でテーブル スキーマを表示します。
- Google Cloud コンソールで、[BigQuery] ページに移動します。BigQuery Studio に移動します。
- Iceberg テーブルのメタデータを表示します。