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

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

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

始める前に

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

  2. BigLake API を有効にします(有効になっていない場合)。

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

    API を有効にするには、serviceusage.services.enable 権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を介してこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(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 テーブルにクエリを実行するには、クエリで 4 つの部分からなるテーブル名を PROJECT_NAME.CATALOG_ID.NAMESPACE_OR_SCHEMA_NAME.TABLE_NAME の形式で使用します。

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 になります。これは、後で P.C.N.T 構文を使用して BigQuery でカタログをクエリするときに使用されます。例: my-project.catalog_id.quickstart_namespace.quickstart_table

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

  • TABLE_NAME: テーブルの名前。

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

タイムトラベルを使用して、マネージド Apache 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 でクエリする

特定の snapshot 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';

次のステップ