Lakehouse は、Apache Iceberg REST カタログ エンドポイントを介して BigQuery カタログにリクエストをルーティングすることで、BigQuery との相互運用性を提供します。この機能により、BigQuery で管理されているテーブル(Iceberg マネージド テーブルなど)を、Apache Spark や Trino などの外部オープンソース(OSS)エンジンに公開できます。
メタデータを保存するための専用の Lakehouse カタログ コンテナを作成する代わりに、Apache Iceberg REST カタログ エンドポイントは純粋にプロキシ ゲートウェイとして機能します。外部エンジンが bq:// ウェアハウス接頭辞を使用して接続すると、ゲートウェイはカタログ リクエストを BigQuery の内部カタログに直接ルーティングします。これにより、標準の BigQuery DDL または API を使用して BigQuery 内で直接テーブルを作成および管理できます。また、外部 OSS エンジンに読み取り専用アクセス権を付与して、REST カタログ エンドポイントを介してそれらのテーブルにクエリを実行できます。
REST カタログ エンドポイントを介して BigQuery テーブルをクエリする仕組み
リクエストを BigQuery カタログにルーティングすると、Lakehouse ランタイム カタログの Apache Iceberg REST カタログ エンドポイントを介して、Iceberg マネージド テーブルや BigQuery metastore テーブルなどの BigQuery テーブルを公開できます。
ワークフローは次のように動作します。
- BigQuery カタログにテーブルを作成する: DDL ステートメントを使用して、BigQuery に Iceberg マネージド テーブルを作成します。このテーブルは BigQuery カタログに存在し、BigQuery アクセス制御リスト(ACL)に則って管理され、BigQuery REST リソースとして機能します。
- Lakehouse ランタイム カタログから BigQuery ウェアハウスに連携する: Lakehouse ランタイム カタログの Apache Iceberg REST API を使用して、
bq://projects/PROJECT_IDウェアハウス パス形式(またはリージョン バージョンbq://projects/PROJECT_ID/locations/LOCATION)で指定されたウェアハウスに連携します。これにより、Apache Iceberg REST Catalog API を介して、Apache Spark などの Compute Engine から BigQuery テーブルにアクセスできます。この構成では、Spark からは読み取り専用のエクスペリエンス、BigQuery からは読み取り / 書き込みのエクスペリエンスが得られます。
考慮事項
BigQuery カタログにリクエストをルーティングしても、専用の Lakehouse カタログ リソースは作成されません。そのため、リソース階層、バケットとカタログのリージョン、4 つの部分からなる P.C.N.T 命名構造など、他のカタログレベルのコンセプトと構成は、この方法には適用されません。基盤となる API では、これは
CATALOG_TYPE_BIGQUERY構成に対応します。BigQuery カタログにリクエストをルーティングする場合、ストレージ アクセスの委任(認証情報の提供)はサポートされません。REST カタログ エンドポイントを介して BigQuery テーブルを公開することは、クロスクラウド データへのアクセスとは異なります。このワークフローでは Google Cloud テーブルが外部 OSS エンジンに公開されますが、Lakehouse は Google Cloud を Databricks Unity Catalog などのリモート外部カタログに接続し、データを移行することなく、BigQuery や OSS エンジンから直接、他のクラウド プロバイダに保存されているデータをクエリします。このワークフローの詳細については、クロスクラウド データアクセスについてをご覧ください。
Apache Iceberg REST カタログ エンドポイントで管理されるテーブルとの比較
REST カタログ エンドポイントを介して BigQuery テーブルを公開することは、Lakehouse ランタイム カタログが Apache Iceberg REST カタログ エンドポイントを使用するワークフローとは次の点で異なります。
- リソース管理とカタログ ストレージ: BigQuery カタログのテーブルは、BigQuery REST リソースとして存在し、Lakehouse ランタイム カタログはプロキシ ゲートウェイとして機能します。Lakehouse ランタイム カタログが Apache Iceberg REST カタログ エンドポイントを使用してテーブルを直接管理する場合、これらのテーブルは Lakehouse REST リソースとして保存されます。
- アクセス制御: BigQuery カタログのテーブルは、BigQuery IAM 権限とアクセス制御リスト(ACL)を使用します。Lakehouse ランタイム カタログで直接管理されるテーブルは、Lakehouse ACL を使用します。
- エンジンの読み取り / 書き込み機能: Iceberg マネージド テーブルは、BigQuery を介した読み取り / 書き込みアクセスと、Spark などの外部エンジンからの読み取り専用アクセスを提供します。Apache Iceberg REST カタログ エンドポイントを介して Lakehouse ランタイム カタログで直接管理されるテーブルは、BigQuery と Spark などの外部エンジンの両方からの読み取り / 書き込みオペレーションをサポートしています。
始める前に
-
BigLake API を有効にします(有効になっていない場合)。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限が必要です。プロジェクトを作成した場合は、オーナーロール(roles/owner)を介してこの権限がすでに付与されている可能性があります。それ以外の場合は、Service Usage 管理者ロール(roles/serviceusage.serviceUsageAdmin)を介してこの権限を取得できます。ロールを付与する方法を確認する。
必要なロール
Apache Iceberg REST カタログ エンドポイントを介して BigQuery テーブルをクエリするために必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
-
カタログ リソースを読み取り、テーブルデータをクエリする:
- プロジェクトに対する BigLake 閲覧者 (
roles/biglake.viewer) - Cloud Storage バケットに対する Storage オブジェクト閲覧者 (
roles/storage.objectViewer)
- プロジェクトに対する BigLake 閲覧者 (
-
名前空間を作成するか、外部エンジンで作成されたテーブルを変更します。
- プロジェクトに対する BigQuery データ編集者 (
roles/bigquery.dataEditor) - Cloud Storage バケットに対するストレージ管理者 (
roles/storage.admin)
- プロジェクトに対する BigQuery データ編集者 (
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
Managed Service for Apache Spark などの外部クエリエンジンを使用して名前空間を作成したり、外部エンジンから作成されたテーブルを変更したりする場合は、そのエンジンでジョブを実行するサービス アカウントにこれらのロールを付与します(Iceberg マネージド テーブルは外部エンジンから読み取り専用です)。
BigQuery ウェアハウス用にクライアントを構成する
BigQuery ウェアハウスに接続するには、クライアント アプリケーションを構成するのクライアント構成例の WAREHOUSE_PATH フィールドで、bq://projects/PROJECT_ID ウェアハウス形式を使用してクライアント(Apache Spark や Trino など)を構成します。
BigQuery のロケーションを含めて、今後のリクエストを bq://projects/PROJECT_ID/locations/LOCATION 形式を使用して単一のロケーションに制限することもできます。
これらのリソースは BigQuery によって管理されるため、該当する必要な権限が必要です。
BigQuery ウェアハウスに名前空間を作成する
クライアントを構成したら、テーブルの名前空間を作成できます。
Spark
BigQuery ウェアハウスに名前空間を作成するには、LOCATION 句と DBPROPERTIES 句を含めます。
spark.sql("CREATE NAMESPACE IF NOT EXISTS NAMESPACE_NAME LOCATION 'gs://BUCKET_NAME/NAMESPACE_NAME' WITH DBPROPERTIES ('gcp-region' = 'LOCATION');") spark.sql("USE NAMESPACE_NAME;")
次のように置き換えます。
NAMESPACE_NAME: 名前空間の名前。BUCKET_NAME: カタログで使用している Cloud Storage バケット。LOCATION: BigQuery のロケーション。デフォルト値はUSマルチリージョンです。
Trino
BigQuery ウェアハウスにスキーマを作成するには、LOCATION プロパティと gcp-region プロパティを含めます。
CREATE SCHEMA IF NOT EXISTS CATALOG_NAME.SCHEMA_NAME WITH ( LOCATION = 'gs://BUCKET_NAME/SCHEMA_NAME', "gcp-region" = 'LOCATION'); USE CATALOG_NAME.SCHEMA_NAME;
次のように置き換えます。
CATALOG_NAME: Apache Iceberg REST カタログ エンドポイントを使用する Trino カタログの名前。SCHEMA_NAME: スキーマの名前。BUCKET_NAME: カタログで使用している Cloud Storage バケット。LOCATION: BigQuery のロケーション。デフォルト値はUSマルチリージョンです。
BigQuery でテーブルをクエリする
BigQuery ウェアハウスで作成したテーブルは BigQuery に表示され、標準の BigQuery SQL を使用して直接クエリできます(4 つの部分からなる P.C.N.T 名は必要ありません)。
SELECT * FROM `NAMESPACE_NAME.TABLE_NAME`;
次のように置き換えます。
NAMESPACE_NAME: 名前空間の名前。TABLE_NAME: テーブルの名前。