Esegui query su BigQuery utilizzando la federazione del catalogo

Lakehouse for Apache Iceberg fornisce interoperabilità con BigQuery tramite una funzionalità nota come federazione del catalogo BigQuery. Questa funzionalità consente di esporre le tabelle gestite da BigQuery, ad esempio le tabelle gestite da Iceberg, a motori open source (OSS) esterni come Apache Spark e Trino.

Anziché creare un container di catalogo Lakehouse dedicato per archiviare i metadati, l'endpoint del catalogo REST Apache Iceberg funge esclusivamente da gateway proxy. Quando i motori esterni si connettono utilizzando il prefisso del warehouse bq://, il gateway instrada le richieste di catalogo direttamente al catalogo interno di BigQuery. In questo modo, puoi creare e gestire le tabelle direttamente in BigQuery utilizzando DDL o API BigQuery standard, fornendo al contempo ai motori OSS esterni l'accesso in sola lettura per eseguire query su queste tabelle tramite l'endpoint del catalogo REST.

Formati di tabella supportati

Sono supportate solo le tabelle Apache Iceberg V2; le tabelle Iceberg V1 non sono supportate. Se hai tabelle Iceberg V1 esistenti archiviate nel catalogo BigQuery, devi eseguirne l'upgrade alla versione V2 (ad esempio, eseguendo ALTER TABLE catalog.schema.table SET TBLPROPERTIES ('format-version'='2'); o utilizzando operazioni del motore simili) prima di utilizzarle con la federazione del catalogo BigQuery.

Come funziona la federazione del catalogo BigQuery

La federazione del catalogo BigQuery consente di esporre le tabelle BigQuery, come le tabelle gestite da Iceberg e le tabelle del metastore BigQuery, tramite l'endpoint del catalogo REST Apache Iceberg del catalogo runtime Lakehouse.

Il flusso della federazione del catalogo BigQuery funziona nel seguente modo:

  1. Crea una tabella nel catalogo BigQuery: crei una tabella gestita da Iceberg in BigQuery utilizzando le istruzioni DDL. Questa tabella esiste nel catalogo BigQuery, è regolata dagli elenchi di controllo dell'accesso (ACL) di BigQuery e funziona come risorsa REST BigQuery.
  2. Esegui la federazione nel warehouse BigQuery dal catalogo runtime Lakehouse: utilizzando l'API REST Apache Iceberg del catalogo runtime Lakehouse, esegui la federazione in un warehouse specificato dal formato del percorso delbq://projects/PROJECT_ID warehouse (o dalla versione regionale, bq://projects/PROJECT_ID/locations/LOCATION). In questo modo, puoi accedere alla tabella BigQuery dai motori di calcolo come Apache Spark tramite l'API Lakehouse per Apache Iceberg. In questa configurazione, ottieni un'esperienza di sola lettura da Spark, ma un'esperienza di lettura e scrittura da BigQuery.

Confronto con le tabelle gestite dall'endpoint del catalogo REST Apache Iceberg

La federazione del catalogo BigQuery differisce dai flussi di lavoro in cui il catalogo runtime Lakehouse utilizza l'endpoint del catalogo REST Apache Iceberg nei seguenti modi:

  • Gestione delle risorse e archiviazione del catalogo: le tabelle federate risiedono nel catalogo BigQuery come risorse REST BigQuery, e il catalogo runtime Lakehouse funge da gateway proxy. Quando il catalogo runtime Lakehouse utilizza l'endpoint del catalogo REST Apache Iceberg, le tabelle vengono archiviate direttamente all'interno del catalogo come risorse REST Lakehouse per Apache Iceberg.
  • Controllo dell'accesso: le tabelle federate utilizzano le autorizzazioni IAM di BigQuery e gli elenchi di controllo dell'accesso (ACL). Quando il catalogo runtime Lakehouse utilizza l'endpoint del catalogo REST Apache Iceberg, le tabelle utilizzano gli ACL Lakehouse per Apache Iceberg.
  • Funzionalità di lettura e scrittura del motore: le tabelle federate forniscono l'accesso in lettura e scrittura tramite BigQuery, ma l'accesso in sola lettura da motori esterni come Spark. Quando il catalogo runtime Lakehouse utilizza l'endpoint del catalogo REST Apache Iceberg, le tabelle supportano le operazioni di lettura e scrittura sia dalle API BigQuery sia dai motori esterni come Spark.

Prima di iniziare

  1. Verifica che la fatturazione sia attivata per il tuo Google Cloud progetto.

  2. Abilita l'API BigLake.

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin), che contiene l'autorizzazione serviceusage.services.enable. Scopri come concedere i ruoli.

    Abilita l'API

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per utilizzare la federazione del catalogo in BigQuery, chiedi all'amministratore di concederti i seguenti ruoli IAM:

  • Leggi le risorse del catalogo ed esegui query sui dati delle tabelle:
  • Esegui operazioni DML (Data Manipulation Language) con la federazione del catalogo BigQuery:
    • Editor dati Bigquery (roles/bigquery.dataEditor) sul progetto
    • Amministratore Storage (roles/storage.admin) sul bucket Cloud Storage. Se utilizzi motori di query come Managed Service for Apache Spark per eseguire operazioni DML, concedi questi ruoli all'account di servizio che utilizzi per eseguire i job in quel motore.

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Configura la federazione del catalogo BigQuery

Per abilitare la federazione del catalogo BigQuery, configura il client (ad esempio Apache Spark o Trino) con il bq://projects/PROJECT_ID formato del warehouse in il campo WAREHOUSE_PATH negli esempi di configurazione del client in Configura l'applicazione client.

Puoi anche scegliere di includere una località BigQuery per limitare le richieste future a una singola località utilizzando il bq://projects/PROJECT_ID/locations/LOCATION formato.

Poiché queste risorse sono gestite da BigQuery, devi disporre di quelle applicabili autorizzazioni richieste.

Crea spazi dei nomi per le tabelle federate

Dopo aver configurato il client per la federazione del catalogo BigQuery, puoi creare uno spazio dei nomi per le tabelle federate.

Spark

Per utilizzare la federazione del catalogo BigQuery, includi le clausole LOCATION e 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;")

Sostituisci quanto segue:

  • NAMESPACE_NAME: un nome per lo spazio dei nomi.
  • BUCKET_NAME: il bucket Cloud Storage che utilizzi con il catalogo.
  • LOCATION: una località BigQuery. Il valore predefinito è la multiregione US.

Trino

Per utilizzare la federazione del catalogo BigQuery, includi le proprietà LOCATION e 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;

Sostituisci quanto segue:

  • CATALOG_NAME: il nome del catalogo Trino che utilizza l'endpoint del catalogo REST Apache Iceberg.
  • SCHEMA_NAME: un nome per lo schema.
  • BUCKET_NAME: il bucket Cloud Storage che utilizzi con il catalogo.
  • LOCATION: una località BigQuery. Il valore predefinito è la multiregione US.

Esegui query sulle tabelle federate in BigQuery

Le tabelle create in un catalogo federato sono visibili in BigQuery e possono essere sottoposte a query direttamente utilizzando SQL BigQuery standard (senza bisogno di un nome P.C.N.T in quattro parti):

SELECT * FROM `NAMESPACE_NAME.TABLE_NAME`;

Sostituisci quanto segue:

  • NAMESPACE_NAME: il nome dello spazio dei nomi.
  • TABLE_NAME: il nome della tabella.

Passaggi successivi