Lakehouse ランタイム カタログでリソースを作成して管理する

Lakehouse for Apache Iceberg は、Lakehouse ランタイム カタログによるリソース管理をサポートしています。

この共有カタログにより、さまざまなデータ処理エンジンでオープンソース ワークロード用に複数のカタログを維持する必要がなくなります。サポートされているオペレーションには、Namespace やテーブルなどのリソースの作成、表示、変更、削除が含まれます。

始める前に

  1. Google Cloud プロジェクトに対して課金が有効になっていることを確認します

  2. BigQuery、BigQuery Storage、Managed Service for Apache Spark の各 API を有効にします。

    API を有効にするために必要なロール

    API を有効にするには、serviceusage.services.enable 権限を含む Service Usage 管理者 IAM ロール(roles/serviceusage.serviceUsageAdmin)が必要です。詳しくは、ロールを付与する方法をご覧ください。

    API を有効にする

必要なロール

Lakehouse ランタイム カタログで Apache Iceberg リソースを管理するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

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

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

カタログ リソースを作成する

以降のセクションでは、Lakehouse ランタイム カタログにリソースを作成する方法について説明します。

Namespace を作成する

次のオプションのいずれかを選択します。

API

datasets.insert メソッドを使用して、渡す データセット リソースExternalCatalogDatasetOptions フィールドを指定します。

{
  "datasetReference": {
    "projectId": "PROJECT_ID",
    "datasetId": "DATASET_ID"
  },
  "externalCatalogDatasetOptions": {
    "defaultStorageLocationUri": "URI",
    "parameters": {
      ...
    }
  },
  "location": "LOCATION"
}

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

  • PROJECT_ID: ターゲット データセットを含むプロジェクトの ID。
  • DATASET_ID: ターゲット データセットの ID。
  • URI: データセット内のすべてのテーブルの Cloud Storage URI
  • LOCATION: データセットを作成する BigQuery のロケーション

Apache Spark SQL

CREATE NAMESPACE SPARK_CATALOG.NAMESPACE;

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

  • SPARK_CATALOG: Apache Spark カタログの名前。
  • NAMESPACE: 新しい Namespace の名前。

Terraform

provider "google" {
  project = "PROJECT_ID"
}

resource "google_bigquery_dataset" "default" {
  dataset_id = "DATASET_ID"
  location   = "LOCATION"

  external_catalog_dataset_options {
    default_storage_location_uri = "URI"
    parameters = {
      ...
    }
  }
}

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

  • PROJECT_ID: ターゲット データセットを含むプロジェクトの ID。
  • DATASET_ID: ターゲット データセットの ID。
  • LOCATION: データセットを作成する BigQuery のロケーション
  • URI: データセット内のすべてのテーブルの Cloud Storage URI

Apache Iceberg テーブルを作成する

次のオプションのいずれかを選択します。

API

tables.insert メソッドを使用して、渡す テーブル リソースExternalCatalogTableOptions フィールドを指定します。

{
  "tableReference": {
    "projectId": "PROJECT_ID",
    "datasetId": "DATASET_ID",
    "tableId": "TABLE_ID"
  },
  "externalCatalogTableOptions": {
    "parameters": {
      "table_type": "iceberg",
      "metadata_location": "METADATA_URI"
    },
    "connection_id": "CONNECTION_ID"
  }
}

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

  • PROJECT_ID: ターゲット テーブルを含むプロジェクトの ID。
  • DATASET_ID: ターゲット テーブルを含むデータセットの ID。
  • TABLE_ID: ターゲット テーブルの ID。
  • METADATA_URI: 最新の Apache Iceberg メタデータ ファイルの Cloud Storage URI。例: gs://mybucket/mytable/metadata/1234.metadata.json
  • CONNECTION_ID: Cloud Storage への接続の ID。

Apache Spark SQL

CREATE TABLE SPARK_CATALOG.NAMESPACE.TABLE
  (id bigint, data string) USING iceberg;

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

  • SPARK_CATALOG: Apache Spark カタログの名前。
  • NAMESPACE: 名前空間の名前。
  • TABLE: 新しいテーブルの名前。

Terraform

resource "google_bigquery_table" "default" {
  deletion_protection = false
  dataset_id          = google_bigquery_dataset.default.dataset_id
  table_id            = "TABLE"

  external_catalog_table_options {
    storage_descriptor {
      location_uri  = "STORAGE_URI"
      input_format  = "org.apache.hadoop.mapred.FileInputFormat"
      output_format = "org.apache.hadoop.mapred.FileOutputFormat"
    }
    parameters = {
      "table_type"        = "iceberg"
      "metadata_location" = "METADATA_URI"
      "write.parquet.compression-codec" : "zstd"
      "EXTERNAL" : "TRUE"
    }
  }
}

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

  • TABLE: ターゲット テーブルの名前。
  • STORAGE_URI: テーブルデータが保存されている Cloud Storage URI(gs:// で始まります)。
  • METADATA_URI: 最新の Apache Iceberg メタデータ ファイルの Cloud Storage URI。例: gs://mybucket/mytable/metadata/1234.metadata.json

カタログ リソースを表示する

以降のセクションでは、Lakehouse ランタイム カタログのリソースを表示する方法について説明します。

名前空間を表示する

次のオプションのいずれかを選択します。

API

datasets.list メソッドを使用してすべての名前空間を表示するか、datasets.get メソッドを使用して定義された名前空間に関する情報を表示します。

Apache Spark SQL

カタログ内のすべての名前空間を表示するには、次のステートメントを使用します。

SHOW { DATABASES | NAMESPACES } IN SPARK_CATALOG;

SPARK_CATALOG は、Apache Spark カタログの名前に置き換えます。

定義済みの名前空間に関する情報を表示するには、次のステートメントを使用します。

DESCRIBE { DATABASE | NAMESPACE } [EXTENDED]
SPARK_CATALOG.NAMESPACE;

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

  • SPARK_CATALOG: Apache Spark カタログの名前。
  • NAMESPACE: 名前空間の名前。

テーブルの表示

次のオプションのいずれかを選択します。

API

tables.list メソッドを使用して名前空間のすべてのテーブルを表示するか、tables.get メソッドを使用して定義済みのテーブルに関する情報を表示します。

Apache Spark SQL

名前空間内のすべてのテーブルを表示するには、次のステートメントを使用します。

SHOW TABLES IN SPARK_CATALOG.NAMESPACE;

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

  • SPARK_CATALOG: Apache Spark カタログの名前。
  • NAMESPACE: 名前空間の名前。

定義済みのテーブルに関する情報を表示するには、次のステートメントを使用します。

DESCRIBE TABLE [EXTENDED]
SPARK_CATALOG.NAMESPACE.TABLE;

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

  • SPARK_CATALOG: Apache Spark カタログの名前。
  • NAMESPACE: 名前空間の名前。
  • TABLE: テーブルの名前。

カタログ リソースを変更する

以降のセクションでは、Lakehouse ランタイム カタログのリソースを変更する方法について説明します。

名前空間を更新する

次のオプションのいずれかを選択します。

API

datasets.patch メソッドを使用して、データセット リソースExternalCatalogDatasetOptions フィールドを更新します。datasets.update メソッドはデータセット リソース全体を置き換えるため、推奨されません。

Apache Spark SQL

ALTER DATABASE ステートメントを使用します。

Apache Iceberg テーブルを更新する

次のオプションのいずれかを選択します。

API

tables.patch メソッドを使用して、テーブル リソースExternalCatalogTableOptions フィールドを更新します。tables.update メソッドはテーブル リソース全体を置き換えるため、おすすめしません。

スキーマまたはメタデータ ファイルを更新するには、tables.patch メソッドを使用して autodetect_schema プロパティを true に設定します。

PATCH https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET_ID/tables/TABLE_ID?autodetect_schema=true

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

  • PROJECT_ID: 更新するテーブルを含むプロジェクトの ID。
  • DATASET_ID: 更新するテーブルを含むデータセットの ID。
  • TABLE_ID: 更新するテーブルの ID。

リクエストの本文で、各フィールドの更新後の値を指定します。たとえば、Apache Iceberg テーブルのメタデータ ロケーションを更新するには、metadata_location フィールドの更新後の値を指定します。

{
  "externalCatalogTableOptions": {
    "parameters": {"metadata_location": "METADATA_URI"}
  },
  "schema": null
}'

METADATA_URI は、最新の Apache Iceberg メタデータ ファイルの Cloud Storage URI に置き換えます。例: gs://mybucket/mytable/metadata/1234.metadata.json

Apache Spark SQL

ALTER TABLE ステートメントを使用します。

カタログ リソースを削除する

以降のセクションでは、Lakehouse ランタイム カタログのリソースを削除する方法について説明します。

名前空間を削除する

次のオプションのいずれかを選択します。

API

datasets.delete メソッドを使用します。deleteContents パラメータを true に設定して、名前空間内のテーブルを削除します。

Apache Spark SQL

DROP NAMESPACE SPARK_CATALOG.NAMESPACE;

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

  • SPARK_CATALOG: Apache Spark カタログの名前。
  • NAMESPACE: 名前空間の名前。

テーブルの削除

次のオプションのいずれかを選択します。

API

tables.delete メソッドを使用して、テーブルの名前を指定します。この方法では、Cloud Storage 内の関連ファイルは削除されません。

Apache Spark SQL

テーブルを削除するだけの場合は、次のステートメントを使用します。

DROP TABLE SPARK_CATALOG.NAMESPACE.TABLE;

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

  • SPARK_CATALOG: Apache Spark カタログの名前。
  • NAMESPACE: 名前空間の名前。
  • TABLE: 削除するテーブルの名前。

Cloud Storage でテーブルと関連ファイルを削除するには、次のステートメントを使用します。

DROP TABLE SPARK_CATALOG.NAMESPACE.TABLE PURGE;

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

  • SPARK_CATALOG: Apache Spark カタログの名前。
  • NAMESPACE: 名前空間の名前。
  • TABLE: 削除するテーブルの名前。

次のステップ