テーブルにクエリを実行する

テーブルのクエリでは、Lakehouse ランタイム カタログで管理されるメタデータを使用して、基盤となる Cloud Storage ファイルからデータが読み取られます。

Spark や Trino などのオープンソース エンジンからクエリを実行することも、4 部構成のテーブル名構文(P.C.N.T 構文)を使用して BigQuery から直接クエリを実行することもできます。

始める前に

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

  2. BigLake API を有効にします。

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

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

    API の有効化

  3. Apache Iceberg REST カタログ エンドポイントを使用して、Lakehouse ランタイム カタログを設定します。

必要なロール

テーブルに対してクエリを実行するために必要な権限を取得するには、プロジェクトとストレージ バケットに対する次の IAM ロールを付与するよう管理者に依頼してください。

  • 認証情報ベンディング モードでテーブルデータを読み取る: BigLake 閲覧者(roles/biglake.viewer) - プロジェクト
  • 非認証情報ベンディング モードでテーブルデータを読み取る:
    • BigLake 閲覧者(roles/biglake.viewer)- プロジェクト
    • Storage オブジェクト閲覧者(roles/storage.objectViewer) - Cloud Storage バケット

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

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

テーブルの機能とサポート

Lakehouse ランタイム カタログでテーブルを使用する場合は、さまざまなテーブル タイプとそのオプトイン機能を理解すると便利です。Apache Iceberg テーブルの使用について詳しくは、Apache Iceberg テーブルの概要をご覧ください。

サポートされている Iceberg テーブル

Apache Iceberg V2(一般提供版)テーブルと V3(プレビュー版)テーブルのみがサポートされています。Iceberg V1 テーブルはサポートされていません。既存の V1 テーブルをアップグレードするには、Iceberg V1 テーブルを V2 にアップグレードするをご覧ください。

テーブル オプションを使用する(プレビュー)

特定のテーブル プロパティを構成することで、BigQuery データ操作言語(DML)や自動テーブル管理などの BigQuery マネージド機能を使用できます。これらの機能は、テーブルの作成場所に応じて異なる方法で有効になります。

  • BigQuery から: BigQuery DML と自動テーブル管理はデフォルトで有効になっています。
  • オープンソース エンジンから: オプトインするには、テーブル プロパティを明示的に構成する必要があります。詳細については、テーブル オプションを構成するをご覧ください。

BigQuery からテーブルをクエリするときに、標準の Iceberg テーブルと、BigQuery マネージド機能が有効になっているテーブルにアクセスできます。詳しい手順については、テーブル オプションを構成するをご覧ください。

テーブルに対してクエリを実行する

テーブルからすべてのデータを選択します。

Spark

spark.sql("SELECT * FROM TABLE_NAME;").show()

Trino

SELECT * FROM TABLE_NAME;

BigQuery

BigQuery から Lakehouse ランタイム カタログの Apache Iceberg テーブルにクエリを実行するには、PROJECT_NAME.CATALOG_ID.NAMESPACE_OR_SCHEMA_NAME.TABLE_NAME の形式でクエリに 4 部構成のテーブル名を使用します。

SELECT * FROM `PROJECT_NAME.CATALOG_ID.NAMESPACE_OR_SCHEMA_NAME.TABLE_NAME`;

次の値を置き換えます。

  • PROJECT_NAME: Lakehouse ランタイム カタログ内のカタログを所有するGoogle Cloud プロジェクト。 Google Cloud コンソールで選択した Google Cloud プロジェクトに、クエリの料金が課金されます。

  • CATALOG_ID: カタログの作成時に指定された Lakehouse ランタイム カタログの ID。この識別子は、BigQuery クエリでカタログ名として使用されます。

    この識別子は、Cloud Storage バケットの名前でもあります。

    たとえば、カタログを保存するためにバケットを作成し、そのバケットに iceberg-bucket という名前を付けた場合、カタログ名とバケット名の両方が iceberg-bucket になります。これは、後で BigQuery でカタログをクエリするときに P.C.N.T 構文を使用して使用されます。例: my-project.catalog_id.quickstart_namespace.quickstart_table

  • NAMESPACE_OR_SCHEMA_NAME: Spark を使用している場合はテーブル名前空間、Trino を使用している場合はテーブル スキーマ名。

  • TABLE_NAME: テーブルの名前。

タイムトラベルを使用したクエリ

タイムトラベルを使用して、Lakehouse Iceberg テーブルから過去のデータをクエリできます。BigQuery からは FOR SYSTEM_TIME AS OF 句を使用して、Spark などのオープンソース エンジンからはスナップショット ID、タイムスタンプ、タグ、ブランチを使用して、タイム トラベルできます。

タイムスタンプでクエリする

特定のタイムスタンプのデータをクエリするには:

Spark

SELECT * FROM NAMESPACE.TABLE_NAME TIMESTAMP AS OF '2026-02-26 01:21:00';

BigQuery

SELECT * FROM `PROJECT_ID.CATALOG_ID.NAMESPACE.TABLE_NAME` FOR SYSTEM_TIME AS OF '2026-02-26 01:21:00';

スナップショット ID でクエリする

特定のスナップショット ID のデータをクエリするには:

Spark

SELECT * FROM NAMESPACE.TABLE_NAME VERSION AS OF 10963874102873;

タグでクエリする

タグを作成し、そのタグの時点のデータをクエリするには:

Spark

-- Create tag 'historical-snapshot'
ALTER TABLE NAMESPACE.TABLE_NAME CREATE TAG 'historical-snapshot' AS OF VERSION 123456789012345;

-- Query by tag
SELECT * FROM NAMESPACE.TABLE_NAME VERSION AS OF 'historical-snapshot';

ブランチでクエリを実行する

ブランチを作成し、そのブランチのデータをクエリするには:

Spark

-- Create branch 'audit-branch'
ALTER TABLE NAMESPACE.TABLE_NAME CREATE BRANCH 'audit-branch' AS OF VERSION 123456789012345;

-- Query by branch
SELECT * FROM NAMESPACE.TABLE_NAME VERSION AS OF 'audit-branch';

次のステップ